2016-09-16 13 views
4

1つの表記を別の表記に変換するために、ANTLR 4.5.3を使用します。私はすでにIntelliJ IDEAのプラグインを使って文法の記述を設計しました。ANTLRでAltNumberを受け取る方法は?

私の文法では、1つのルールにいくつかの選択肢があります。

"Parse Tree"の結果を見ると、各ノードは "ルール名": "行番号"で構成されています。

APIを使用してこの情報を受け取るにはどうすればよいですか?私がそれをはっきりと理解するならば、行番号はgetAltNumber()から取り出すことができますが、このフィールドは空です。ドキュメントで

http://www.antlr.org/api/Java/org/antlr/v4/runtime/RuleContext.html#getAltNumber()

デフォルトの実装では、この代替NUMを計算したり格納していないと言われています。

この情報の入手方法?

+0

「代替ラベリング」(TDAR pg 117,261)を使用する方が良い方法です。さもなければ '#getAltNumber' doc - FWIWで提案されているようにサブクラス化してください。これは決して行う必要はありません。 – GRosenberg

+0

行番号がalt番号を意味していますか?私にとっては、ソースコードの行番号のように聞こえます。しかし、私はANTLR文法のIntelliJ出力を知らない。行番号が必要な場合は、getLine()を呼び出してください.-) –

答えて

1

私はまったく同じ問題を抱えていました。ドキュメントはもう少し正確であるべきですが、確かに手がかりを与えます。また、プラグインを直接探して解決につながる可能性があります https://github.com/antlr/intellij-plugin-v4/blob/master/src/java/org/antlr/intellij/plugin/preview/AltLabelTextProvider.java

あなたは、単に例のようにsetAltNumberとgetAltNumberを実装するコンテキストのスーパークラスを追加する可能性があります。 https://github.com/antlr/antlr4/blob/master/tool/src/org/antlr/v4/tool/GrammarInterpreterRuleContext.java

はその後、発電機のパラメータとして例えば、クラスを提供します:

antlr4 -o出力/パス-listener -visitor -DcontextSuperClass = GrammarInterpreterRuleContext -Dlanguage = Javaの-libのlib /パスgrammar.g4

関連する問題