0

私はANTLRv3を使用しています。文法を定義しました。ここで、解析ツリーを表示したいと思います (ANTLRWorks 解析ツリーまたは STACK のように)。http://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java (walking through children)を試しましたが、文字列の解析に現れない文法の節を省略しています。

例えば。私はSQL文法を持っています。document から SELECT title,description を解析しています。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)

4

1 に答える 1

0

ANTLR 3 は、文法の特別な構文 (演算子^!、および->) によって定義されたカスタム形状で AST を構築します。ANTLR 4 は、文法自体の形状に自動的に従う解析ツリーを構築します。

ANTLR 3 を ANTLR 4 のように動作させるには、ルート ノードがルール自体の名前を持つ文法のすべてのパーサー ルールに対して書き換えルールを作成する必要があります。例えば:

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

他の方向に関しては、ANTLR 4 を ANTLR 3 のように動作させる「簡単な」方法はありません。

于 2013-05-15T13:05:56.760 に答える