2012-02-27 13 views
2

^と!を使用しています。オペレータはルートノードを設定し、ASTには含まれないようにします。しかし、ANTLRWorksによって生成されるツリーに違いはありません。文法が間違っているのか、ANTLRWorksが正しいツリーを作成していないのかはわかりません。ここでANTLR AST演算子を無視する

は、これらの括弧は、ASTに含めるべきではありません、私の文法のスニペット

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

です。

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

PLUSまたはMINUSは、ASTのルートノードである必要があります。

しかし、これらのことのいずれも、私が期待する方法では起こっていません。私はそれらを取り除いたり、戻したりしても差はありません。 ANTLRWorks 1.4.3 ANTLR 3.4

+0

。私はまたあなたにastを出力するようantlrに言ったとします? – stryba

+0

@strybaツリーの図を示すインタプリタタブ。それともASTではなく、これは構文木ですか? –

答えて

4

文法のオプションブロックにoutput=AST;を入れても、ANTLRWorksのインタプリタは解析ツリーを表示します。

しかし、ANTLRWorksのデバッガでASTを表示します。デバッガを有効にするには、CTL + Dを押すか、メニューバーからデバッグ実行->を選択します。

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

enter image description here

+0

追加情報と画像をありがとう! –

+0

問題はありません@AustinHenley。 –

2

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

+0

インタプリタのみが解析ツリーを表示するので、デバッガはASTを視覚化できます。詳細は私の答えを見てください。 –