2017-10-27 11 views
1

컴파일러 관련 클래스의 프로그래밍 배정의 일부입니다. 나는 플렉스 들소 대신에 ANTLR을 사용하도록 교사에게 제안했으며, 여기서 그는 우리가 원하는 모든 것, 즉 어휘, 구문 및 의미 분석 (아래 이미지의 처음 세 단계)을 수행하도록 요청합니다. ANTLR을 사용하여 그러한 분석기를 만드는 것이 매우 쉽다는 것을 확신합니다. 컴파일러의 중간 및 객체 코드 생성 단계 (아래 이미지의 나머지 단계)로 인해 실제로 혼란 스럽습니다. 나는 그러한 도구가 사용자에게 그러한 세대를 수행 할 수있는 기능을 제공해야한다고 생각했지만 필자가 작성한 참고서에서도이를 수행하는 방법을 설명하는 항목을 찾지 못했습니다.ANTLR을 사용한 중간 및 목적 코드 생성

enter image description here

여기에 사람이 그렇게하는 방법을 나에게 설명하거나 단지 내 교사를 설득하는 데 도움이 될 수 있습니다 쓰기 물질에 저를 가리킬 수 있습니다.

+0

이것은 매우 광범위한 질문입니다. 기본적으로 ANTLR을 주요 구성 요소로 사용하여 컴파일러를 작성하는 방법을 알고 싶습니까? 매우 야심적인. 나는 ANTLR을 사용하여 Z80 어셈블러를 만들었지 만 컴파일러를 빌드하려고하지는 않을 것입니다. – TomServo

+0

@TomServo 어떻게 든 구체화 될 수 있도록 내 질문을 편집했습니다. –

답변

1

짧은 대답은 ANTLR이 컴파일러 구현에 적합하고 최소한 YACC/Bison과 기능적으로 동일하다는 것입니다.

ANTLR은 질문에 맞게 Lexer (어휘 분석), Parser (구문 분석) 및 Tree Walker (의미 분석) 지원을 제공하며 모두 오류 청취자 및 복구 메커니즘의 적절한 양식을 제공합니다. 심볼 테이블의 예는 github repo입니다.

일반적으로 의미 론적 분석에는 여러 개의 트리 워크가 사용됩니다. 최종 보행은 코드의 중간 표현 (IR)을 출력하는 데 사용될 수 있습니다.

LLVM project에서 제공하는 IR 언어, 최적화 도구 및 코드 생성기를 살펴보고 나머지 단계에 관련된 내용을 확인하십시오.

Prof. Parr의 저서 Language Implementation PatternsTDAR이 도움이 될 것입니다.

+0

개발자가 트리를 걷는 동안 개발자가 직접 중간 코드를 생성해야하는데 이는 파서 생성기 도구로 수행되지 않았습니까? –

+0

예, 이것은 ANTLR, YACC/Bison 및 기타 유사한 파서에는 해당됩니다. 구문 분석 트리 (또는 다른 사람들을위한 AST)의 의미 론적 분석은 기호 테이블과 함께 개발자의 책임입니다. IR을 실제로 렌더링하려면 ANTLR의 부속 라이브러리 [StringTemplate] (http://www.stringtemplate.org/)를 사용하십시오. – GRosenberg

+0

당신은 중간과 객체 코드를 생성하기 위해'StringTemplate'을 사용하는 시작 가이드를 가르쳐 주시겠습니까 –