C 언어 컴파일러를 쓰기 InnerC

ILBC에 대한 InnerC, 나는 프로젝트 주소의 한 버전 독립적으로 그것을 넣어 :

 

https://github.com/kelin-xycs/InnerC               ,

 

InnerC 원래 컴파일 C. ILBC위한 중간 언어 컴파일러 중간 언어로 의도 C 언어 컴파일러이며

ILBC에 대해 "ILBC 규범"을 참조하십시오    https://www.cnblogs.com/KSongKing/p/10354824.html을         .

 

현재, 일부 InnerC는 생성 된 오브젝트 코드와 링크를 포함하지 않는, 구문 분석 및 문법 검사기를 포함 깨달았다.

 

현재 기능 InnerC지지 포인터 배열 전역 변수 구조 함수 INT 플로트 CHAR, 네 개의 작업하게 비교 이상인 기기보다 및 NOR 로직 동작을 포인터,

문 문이 지원되지 않은 상태에서 문이, 대부분 너무 게으른 쓸 경우, 피곤. 그것은 나중에 추가 할 수 있습니다.

반환 브레이크가 문을 계속 지원합니다.

(루프) 범위 절과 절 경우 동시에 지원 범위는, 이러한 본체 범위의 함수 인, 범위 매개 변수, 함수이다.

그것은 지원하지 않습니다 ++ - + = - =, 쓸 시간이 없다. 그것은 나중에 추가 할 수 있습니다.

 

구문 검사의 실현 만이 거친 부분은 단지 코드를 작성, 높은 범위는 같은 이름의 변수를 선언의 여부, 변수가 선언되었는지 여부를 확인하기 위해, 테스트하지.

또한 명명 된 체크 함수 이름을 구현하고 구조의 이름은 영숫자 문자로 밑줄 밑줄로 시작되어야하며, 키워드와 동일 할 수 없습니다.

 

체크 기능 이름과 구조 명에 체크인 구문 존재하므로 제라는 확인하기 때문에 명명 확인 및 문법 검사는 별도이다.

 

에서 문법 검사기의 대부분은 I_C_Member. 종류 및 문법 검사 () 메소드를 달성했다.

그냥 라인의 종류와 구문 확인 I_C_Member 인터페이스 () 메소드를 달성하기 위해 이동합니다.

 

모든 구성원은 다양한 표현의 다양한 문장의 변수 선언 구조 기능 범위를 포함하여, I_C_Member 인터페이스를 상속 문법.

 

아키텍처는 매우 분명하다 그래서, 문제의 나머지 부분은 바로 작업입니다 완료합니다.

 

여기에 작품의 유형은 수행하고 그것에 대해 문법 검사기 열 수 :


확인 높은 범위는 같은 이름으로 정의 된 변수되었다는

가변 파라미터는 정확한 입력 값 필드 등이할지 여부 등 INT 플로트 타입 등 기본 구조를 반환

당신은 정의되지 않은 변수 매개 변수 필드를 사용하고 있습니까

변수가 선언되기 전에 사용할 수 없습니다

표현식이 연산자를 일치의 양쪽에 입력

캐스트 적법성

이 함수는 반환 형식 선언의 형식과 값 일치를 반환

정의되지 않은 기능과 구조 여부

크기 길이 배열 선언은, 당신이 길이 치수를 선언 할 수 없습니다 일정한 배열을 초기화하는 경우, 상수 또는 상수 표현식이 될 수 있지만, 이것은 단지 하나의 차원 배열을 적용하는 것

글로벌 변수는 상수 또는 상수 식으로 만 초기화된다

문법 및 검사 타입의 대부분은 서로 너무이라 그룹화되어 있으므로 "타입 및 구문 검사."

 

이 내용은 코드의 주석에 기록됩니다.

 

상기에 더하여, 두 개의 독립적 인 신택스 체크는 각각의 유형과 구문을 확인한 후에 실행된다있다 :

 

확인 모든 경로는 함수 반환 값이

포함 할 수 없습니다 순환 구조를 확인

 

이 과정은 명확하게 코드를 볼 수 있습니다.

 

InnerC_Demo 프로젝트 데모의 솔루션에서 볼 수있는,이는 어떤 구문 오류가있는 경우, C 소스 파일로 컴파일됩니다, C 소스 파일을 컴파일 "테스트"버튼을 클릭 지정된의 WinForm 프로젝트를 실행 InnerC_Demo.exe, 부재 트리 문법 구문 트리 멤버는 다른 파일에 저장되고 C의 소스 코드의 환원 후, C의 소스 코드의 감소를 역전 파일의 파일 이름은 소스 파일의 이름으로, 원래의 파일 이름과 ".reverse.c"인 "교류"입니다, 감소 후 파일 이름은 "acreverse.c"입니다.

 

빈 \ 디버그 디렉토리 InnerC_Demo에서 실행 InnerC_Demo.exe가 TEST.C이 데모 효과를 관찰 컴파일하는 TEST.C있다.

 

이것은 C 구문은 {1, 2, 3, 4} 배열 나타내는 상수로서 괄호와 C 언어이다 수정 거의 가지고 있지만 InnerC 컴파일러 복잡하게 만든다.

중괄호 코드 블록 이러한 신체 기능, 구조로서, 또는 절 않거나 동안 절 (루프)를 나타내는 데 사용되므로

상수 배열은 제 1 층과 가새 분할 기능 블록 구조가 번잡 중괄호하게 해결한다.

명확하고 간단한 컴파일러를 유지하기 위해, 나는 개혁을하기로 결정,

예 [1, 2, 3, 4], 매우 흥미로운 결과로서 이용 배열 상수, 괄호 안의. 하, 하, 하 아.

내가 본 발명에 기성 세대는 C 언어 환경이 습관을 중괄호 또는 괄호 배열로 표현 다른 언어 불편 때 볼 가능성이있을 수 있습니다 생각합니다.

 

미래는 D # 컴파일러 어서 InnerC에 근거하여 확장 할 수 있습니다, 이러한 접근 방식의 D 번호를 채택합니다.

 

그 람다 표현식을 판단 여전히 증가하지가 D 번호의 람다 표현식, 그래서?

예하지만, 람다 표현 명백한 큰 수요이지만, 또한이 있는지 여부 () => 전방 운전자 명시 브레이스 여부 중괄호 람다 식을 결정하고,

괄호에 참여할지 여부는 파티션 방법은 람다 중괄호가 우려 컴파일러 아키텍처 분산을 못하게 연산 식 결정하는 것입니다 차단

어레이는 매우 미약하기위한 지속적인 요구가, 구조 브레이스 분할 기능 블록에 추가 될 때 포커스 컴파일러 아키텍처 어레이 상수 분산액 교정기 발생 여부를 판정한다.

 

응? 그들은 배열 상수 어디에서 온 당신은 체외의 구조와 기능에 요청할 수 있습니다? 글로벌 변수는 아, 전역 변수의 초기화는이 배열 상수를 중괄호 사용할 수 있습니다. 

내부 구조와 기능, 사실, 아무런 문제가합니다.

 

추천

출처www.cnblogs.com/KSongKing/p/11013210.html