2013-05-15 41 views
0

我正在使用ANTLRv3。我定義了一個語法。 現在我想要顯示分析樹(就像在ANTLRWorks分析樹或堆棧中一樣)。 我試過http://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java(步行通過孩子),但它忽略語法中的子句,在解析字符串中沒有出現 。解析ANTLRv3樹doent不會生成全樹

例如,我有一個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 3的行爲與ANTLR 4類似,您需要在每個解析器規則中創建的重寫規則,其中根節點具有規則本身的名稱。例如:

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

至於其他方向,就不是一個「簡單」的方法,使ANTLR 4的行爲很像ANTLR 3.

+0

這正是我想要的。謝謝!這些鏈接將幫助其他人:[鏈接](http://www.antlr.org/wiki/display/ANTLR3/Tree+construction)[鏈接](http://www.antlr2.org/doc/trees.html) – romsac