2011-04-29 1 views
2

저는 ANTLR 초보자입니다. 제작자는 2 권의 책을 보유하고 있으며 많은 블로그/포럼 게시물을 읽고 있습니다.하지만 지금 당장은 알지 못하는 것 같습니다.ANTLR에서 어떻게 흐름 제어 (if-else ... for ... while ....)의 * 실행 *을 구현할 수 있습니까?

이것에 대한 문법 코드와 이에 대한 트리 문법 코드가 있지만이 컨트롤 흐름이 얼마나 정확한지 이해할 수 없습니다.

내가 당신을 위해 충분히 명확 내 질문에 넣을 수 없다고 생각하기 때문에, 내가 그런 식으로 넣어 보자 :

당신이 나에게 필요한 모든 코드를 보여 주실 래요을 그 파서

for (i=0; i!=3; i=i+1) { 
    if (i==2) print i; 
    else print "not 2"; 
} 
에 통과시

윌 출력 : 자바에서 바람직

not 2 
not 2 
2 

.

편집 : ANTLR을 사용하는 code.google.com에서 호스팅되는 작은 프로젝트를 발견했으며이를 기반으로 내 질문이 어리석은 짓인지 이해했습니다. :)

+3

당신이 물어 본 것은 단지 구문 분석 이상의 ** 많은 ** 것입니다. 당신은 컴파일과 실행을 요구했습니다. 파서는 소스 코드를 입력으로 받아 AST (Abstract Syntax Tree)를 생성합니다. 코드를 실행하지 않습니다. –

+0

그렉, 나는 정확히 어디에서 마법을 가졌는지 물어볼 생각이었고, ... 파서에 무언가를 써야하는지, 아니면 내 방문자에 있어야하는지 모르겠다. – name

+0

컴파일 및 실행이 필요하지 않지만 프로그램의 의미를 시뮬레이트하기 위해 프로그램을 "해석"해야합니다. ANTLR을 사용하면 구문 분석을 할 수 있으며 추가적인 노력으로 이러한 통역사 작성을위한 훌륭한 토대가되는 AST를 얻을 수 있습니다. AST로 작성된 통역사는 일반적으로 어렵지 않지만 ANTL은 AST를 전달하기 만하면 원하는 것을 구현할 수 있습니다 (원하는대로 통역사 또는 컴파일러). –

답변

2

스캐너/파서로서 Antlr은 프런트 엔드 컴파일러라고 불리는 것을 구현합니다. Antlr의 임무는 자유 형식의 텍스트를 가져 와서 프로그램, 특히 컴파일러 백엔드가 사용하기 쉬운 데이터 구조로 변환하는 것입니다.

컴파일러 백엔드 (또는 인터프리터 등)를 쓰는 것이 여전히 당신 일인 것처럼 나는 두려워합니다!

+0

나는 Terence Parr의 책에있는 예제에서 선언 부분의 변수 "first"와 for의 끝에있는 "inc"를 포함하는주기가 있기 때문에 혼란 스러웠다. 코드에서 "first"와 "inc"에 대한 선언을 찾지 못했고 AntlrWorks의 기울임 꼴로되어 있기 때문에 실제로 내장 된 것으로 간주되어 실제로 for-cycle에 사용되었습니다. – name

관련 문제