당신의 나무가 여기에, 단지 노드의 1 개 차원 목록입니다 당신이 부모/형제 계층 구조를 만들 수있는 방법 가정 : ANTLR에서
는 AST 생성을위한 두 개의 사업자가를 :
! excludes the node (token) from the (sub)tree;
^ makes a node the root of a (sub)tree.
때 어떤 연산자를 가 제공되면 노드/토큰이 현재 루트의 자식으로 추가됩니다. 이것은 아마도 당신에게 일어난 일입니다 : 당신이 보는 모든 것은 노드/토큰의 1 차원 목록입니다.
예 :
grammar Exp;
options {output=AST;}
// ... some rules ...
addition
: Integer '+'^ Integer ';'!
;
Integer
: '0'
| '1'..'9' '0'..'9'*
;
표현 6+9;
에 대해 다음 트리를 만들 것입니다 addition
규칙 :
+
/\
/ \
6 9
당신이 볼 수 있듯이 다음 +
루트입니다 (그것이 후에 ^
있다), 숫자는 토큰 (연산자가 없음)이고 세미 콜론은 제외됩니다 (그 뒤에 !
이 있음).
자세한 내용은 7 장, 트리 구조, The Definitive ANTLR Reference을 참조하십시오. 나는 당신이 사본을 얻는 것을 강력히 권한다.
처음부터 시작해야하는지 여부는 결정하는 것이 좋습니다. 빈 문법 파일부터 시작하여 점차 모든 규칙이 작동하는지 확인하기 위해 규칙을 점차적으로 추가합니다. 기존 문법에서 일부 트리 연산자를 뿌리기 만하면 디버깅하기가 매우 어려울 수 있습니다. 특히 ANTLR에 익숙하지 않은 경우 특히 그렇습니다.
행운을 빈다.
Err, 당신은 실제로 * 추상적 인 구문 트리를 다시 얻고 싶다고 생각합니까? –
아 그래, 그 제목은 그렇게 말하지만 실제 질문은 당신이 AST를 다시 얻은 것처럼 들린다. –
나는 AST를 되 찾는다. 그러나 그것은 트리 문법을 적용하기에 너무 부적절한 형식으로 보인다. . 미안해, 내 질문에 그 말을 놓쳤다! – RCIX