2012-02-27 5 views
2

^및! 연산자를 사용하여 루트 노드를 설정하고 AST에 포함시키지 않도록합니다. 그러나, 그것은 ANTLRWorks에 의해 생성 된 트리에서 차이를 만들지 않습니다. 따라서 문법이 잘못되었거나 ANTLRWorks가 올바른 트리를 작성하지 않은 것인지 확실하지 않습니다. 여기 ANTLR AST 연산자를 무시합니다.

expr 
: '('! logExpr ')'!; 

이 괄호는 AST에 포함되어서는 안 내 문법의 조각입니다.

addExpr 
: multExpr ((PLUS|MINUS)^ multExpr)*; 

+ 또는 -는 AST의 루트 노드해야합니다.

그러나 내가 예상 한대로 이러한 일이 일어나지 않습니다. 내가 그들을 제거하거나 다시 넣을 때 아무런 효과가 없습니다. ANTLRWorks 1.4.3 ANTLR 3.4

+0

귀하는 귀하의 결론에 도달하기 위해 Antlrworks를 보았습니까? 나는 또한 ast를 출력하도록 antlr에게 말했 을까? – stryba

+0

@stryba 트리의 다이어그램을 보여주는 인터프리터 탭입니다. 아니면 AST가 아닌 파스 트리입니까? –

답변

4

문법의 options-block에 output=AST;을 넣었을지라도 ANTLRWorks의 해석기는 구문 분석 트리를 보여줍니다.

그러나 ANTLRWorks의 디버거 에 AST를 표시합니다. 디버거를 활성화하려면 CTL + D를 누르거나 메뉴 표시 줄에서 디버그실행->를 선택합니다.

디버거는 구문 분석 트리와 AST를 시각화 할 수 있습니다. 이 아니며은 Java가 아닌 내장 코드를 처리합니다.

enter image description here

+0

추가 정보와 이미지를 보내 주셔서 감사합니다! –

+0

문제는 @AustinHenley입니다. –

2

답변을 찾았습니다. ANTLRWorks는 AST가 아닌 구문 분석 트리를 표시합니다. 모든 재 작성을 무시합니다. 이것은 두 번째 질문으로 이어졌습니다. ANTLRWorks가 나를 위해 그것을하지 않는다면 AST를 어떻게 시각화 할 수 있습니까? 그 대답은 here입니다.

+0

인터프리터 만 구문 분석 트리를 표시하므로 디버거가 AST를 시각화 할 수 있습니다. 자세한 내용은 내 대답을 참조하십시오. –