2013-05-15 3 views
0

ANTLRv3을 사용하고 있습니다. 나는 문법을 정의했다. 이제 ANTLRWorks Parse Tree 또는 STACK과 같은 Parse Tree를 표시하려고합니다. (걷는 아이들을 보았습니다.)하지만 구문 분석에서 으로 표시되지 않는 문법의 절을 제외 시켰습니다.ANTLRv3 트리 구문 분석 전체 트리 생성 안 함

예 : 나는 SQL 문법을 가지고있다. 문서에서 SELECT 제목, 설명을 구문 분석하고 있습니다. ANTLRWorks에서 나는 (구문 분석 트리에서) root_statement-> select_statement-> select_expression-> select_list -> [displayed_column, displayed_colulmn]을 볼 수 있습니다.

하지만 root_statement (getChildren을 통해)에서 AST 트리를 가져올 때 select_statement, select_expression을 얻지 못합니다. 아이들은 "SELECT title, description from document"의 문자열에만 사용됩니다.

어떻게하면 ANTLv4와 같은 방식으로 통과 트리를 얻을 수 있습니까? (root_statement.select_statemet.select_expression)

답변

0

ANTLR 3 문법 구문에 의해 정의 된 특별한 맞춤 형상으로하는 AST (연산자 ^, !->)을 구축한다. ANTLR 4는 자동으로 문법 자체의 모양을 따르는 구문 분석 트리를 작성합니다.

이 ANTLR 4처럼 ANTLR 3 행동하라하려면, 당신은 의 루트 노드가 규칙 자체의 이름이 문법의 모든 파서 규칙을 재 작성 규칙을 작성해야합니다 것입니다. 예를 들어 다른 방향으로

myParserRule 
    : x y* -> ^(MyParserRule x y*) 
    | z+ -> ^(MyParserRule z+) 
    ; 

, ANTLR 3. 내가 원하는 정확히 무엇

+0

같은 ANTLR 4없이 행동을 할 수있는 '쉬운'방법이 없습니다. 감사! 이러한 링크는 다른 사람들을 도울 것입니다 : [[link] (http://www.antlr.org/wiki/display/ANTLR3/Tree+construction) [link] (http://www.antlr2.org/doc/trees.html) – romsac