2

^と!を使用しています ルートノードを設定する演算子と、ASTに含まれない演算子。ただし、ANTLRWorksによって生成されるツリーには違いはありません。そのため、文法が正しくないのか、ANTLRWorksが正しいツリーを作成していないのかわかりません。

これが私の文法の抜粋です

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

これらの括弧はASTに含めるべきではありません。

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

プラスまたはマイナスは、ASTのルートノードである必要があります。

しかし、これらのことはどちらも私が期待するようには起こっていません。取り外しても元に戻しても違いはありません。ANTLRWorks 1.4.3 ANTLR 3.4

4

2 に答える 2

4

ANTLRWorksのインタプリタは、output=AST;すでに自分自身を見つけたように、文法のoptions-blockを入力した場合でも、解析ツリーを表示します。

ただし、ANTLRWorksのデバッガーASTを表示します。デバッガーをアクティブにするには、CTL+を押すDRun->Debug、メニューバーから選択します。

デバッガーは、解析ツリーとASTを視覚化できます。Java以外の埋め込みコードは処理しないことに注意してください。

ここに画像の説明を入力してください

于 2012-02-28T07:56:23.937 に答える
2

私は答えを見つけました。ANTLRWorksは、ASTではなく解析ツリーを表示します。すべての書き換えを無視します。これは私の2番目の質問につながりました。ANTLRWorksが私のためにそれを行わない場合、どのようにASTを視覚化するのですか?その答えはここにあります

于 2012-02-28T00:46:39.033 に答える