2012-07-12 2 views
3

I가 2 문제 :ANTLR - 생성 된 AST 트리를 사용하는 방법?

내 ANTLR 파서에서

, 나는이 재 작성 규칙이 : 어떻게 수집 msg_content 토큰을 사용할 수있다, 내 트리 문법에서

msg: msg_content (COMMA msg_content)* -> ^(MSG_CTS msg_content+); 

를? $ msg_content.text가 null 예외를 반환하고 있습니다.


더 일반적으로 생성 된 AST 트리를 어떻게 사용할 수 있는지에 관해 좀 더 자세히 알려주십시오. 나는 기본적으로 노드 위로 걸어서 다른 것들에 대한 자바 클래스를 만들고 싶다.

(MSG (AGENTS A B) (MSG_CTS x y)) 

내가 "에이전트"에 대한 필드 일부 Java 클래스 "메시지"를 가지고 싶습니다 A, B와 X를 개최합니다 일부 콘텐츠 필드를 포함 :

나는 인쇄됩니다 간단한 나무가 , Y.

나는 ANTLR 최종 가이드를 읽었지만 결합 된 토큰을 사용하는 방법에 대한 참조 또는 심지어 내가 원하는 것처럼 트리를 탐색하는 방법에 대한 참조는 언급하지 않았습니다. 모든 ANTLR 튜토리얼이 표현식 평가자에 관한 것입니다!

ANTLR 온라인 매뉴얼에서 "AST와 Java의 인터페이스"및 "표현식 평가 기"를 보았습니다. 그러나이 문제를 내 문제에 어떻게 적용 할 수있는 지 잘 모르겠습니다. 간단한 예제를 제공 할 수 있다면 매우 유용 할 것입니다!

도와주세요 ... 감사합니다!

답변

1

$의 msg_content.text는 널 제외하고 모든 관련 규칙과 코드를 보지 않고 댓글을 불가능

을 반환합니다. 질문을 편집하고 오류/예외를 재생산하는 독립 실행 형 예제 나 다른 누군가를 실행할 수 있습니까?

((MSG_CTS MSG (대리인 AB) XY)) I는 A, B를 길게 몇 가지 내용 필드를 포함 "에이전트"에 대한 필드 일부 Java 클래스 "메시지"를 가지고 싶습니다

X, Y.

이 자습서 목록을 보시려면 : https://stackoverflow.com/questions/278480/antlr-tutorials, 모두 표현 평가자에 관한 것은 아닙니다. My tutorial은 트리 워커에서 사용자 정의 노드 클래스를 사용하는 방법을 보여줍니다.

this Q&A 또한 트리 워커에서 사용자 정의 노드 클래스를 사용하는 방법을 보여줍니다.

+0

자습서 Bart Kiers를 읽었지만 식 평가원입니다. 내 특별한 문제를 해결하는 방법을 알고 싶습니다. 예를 들어, "Agent"객체를 만들고 "Message"객체에 추가하려고합니다. 그런 다음 아래로 이동하여 "내용"개체를 만들고 같은 메시지 등에 다시 추가하십시오. 어떻게해야합니까? –

+0

@ Inf.S, 아니요, 표현식 평가 기가 아닙니다 : 'for','while' 및'if' 문, 함수 등이있는 작은 언어입니다. 트리 워커에서 다음과 같이 설명했습니다. 정확히 어떻게 커스텀 노드 클래스를 생성 할 것인가? –

+0

내가 다시 가서 튜토리얼을 다시 읽은 다음 Scopes를 읽으십시오. 내가 아직도 붙어 있다면이 Q & A에서 다시 연락 드리겠습니다. 감사! –

관련 문제