2014-03-07 5 views
-1

'새로운'언어를위한 컴파일러를 디자인하고 싶습니다. 새로운 언어는 자체 구문을 가지며 유효한 C 코드를 출력합니다. 즉, ac 코드를 생성합니다. 난 문법을 설계했다. 재귀 적 파생 구문 분석과 추상 구문 트리를 가지고있다. 예를 들어 구조체에 대한 트리가있다. 어떻게 이것을 원래의 C 코드에 매핑 할 수 있는가? 순차적 인 순회를 수행 할 수 있습니까?새로운 프로그래밍 언어의 추상 구문 트리를 평가하는 방법

나는 Aho Ullman 서적을 읽었습니다. 통역사와 편집의 차이점은 무엇입니까? 방문자 패턴을 적용 할 수 있습니까?

답변

2

기계 코드로 매핑하는 것과 같은 방법이지만 대신 C를 출력합니다. 이렇게하면 몇 가지 작업이 더 쉬워집니다 (직접 작성하는 대신 C 컴파일러의 기호 테이블을 활용할 수 있음). C가 허용하는 방식으로 표현해야하므로 몇 가지 사항이 더 어려워집니다.

두 가지가 사용자 언어에서 거의 동일하지 않으면 대부분의 경우 추상 구문 트리를 구체적인 의미 트리로 변환해야합니다.

인터프리터는 실제로 실행되는 의미 트리의 부분에서만 실행되며 반복적으로 실행될 수 있습니다. 또한 인터프리터의 메모리 모델에서 데이터를 조작합니다. 컴파일러는 전체 시맨틱 트리를 한 번 실행해야하며 실행될 수있는 모든 코드를 생성해야합니다. 일반적으로 전체 메모리 모델을 생성해야하지만 C 출력을 사용하면 부분적으로이를 속일 수 있습니다.

드래곤 북에는이 질문에 대한 자세한 답변이 있습니다. 기본적으로 C를 "고수준 어셈블러"로 간주합니다.

+0

내 의심은 ast를 평가하는 방법입니까? – user3217708

+0

언어를 발명하기 때문에 구문의 각 구성 요소에 대해 의도 한 의미가 무엇인지 알 수 있습니다. 구문을 프로그램의 의도 된 동작을 나타내는 양식으로 매핑해야합니다. 즉, 해석에서 컴파일로 이동할 수있는 충분히 직접적인 방식으로 구문을 매핑해야합니다. – keshlam

+0

Aho/Ullman의 저의 저의 저서에서 여러분의 질문은 7 장 "구문 지향 번역"에서 시작합니다. AST를 사용하여 IL (중간 코드) 표현을 작성하십시오. 8-11 장은 그 과정에 대한 추가적인 세부 사항을 제공한다. 처음에는 코드 최적화에 관한 12-14 장을 제공 할 수 있습니다. 15 장에서는 IL을 사용하여 코드를 생성하는 방법을 설명합니다. 그것은 어셈블러 나 바이너리 객체 코드 파일 대신 C 출력에 적용 할 것입니다. – keshlam