저는 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에서 호스팅되는 작은 프로젝트를 발견했으며이를 기반으로 내 질문이 어리석은 짓인지 이해했습니다. :)
당신이 물어 본 것은 단지 구문 분석 이상의 ** 많은 ** 것입니다. 당신은 컴파일과 실행을 요구했습니다. 파서는 소스 코드를 입력으로 받아 AST (Abstract Syntax Tree)를 생성합니다. 코드를 실행하지 않습니다. –
그렉, 나는 정확히 어디에서 마법을 가졌는지 물어볼 생각이었고, ... 파서에 무언가를 써야하는지, 아니면 내 방문자에 있어야하는지 모르겠다. – name
컴파일 및 실행이 필요하지 않지만 프로그램의 의미를 시뮬레이트하기 위해 프로그램을 "해석"해야합니다. ANTLR을 사용하면 구문 분석을 할 수 있으며 추가적인 노력으로 이러한 통역사 작성을위한 훌륭한 토대가되는 AST를 얻을 수 있습니다. AST로 작성된 통역사는 일반적으로 어렵지 않지만 ANTL은 AST를 전달하기 만하면 원하는 것을 구현할 수 있습니다 (원하는대로 통역사 또는 컴파일러). –