問題タブ [antlr4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arraylist - ANTLR の複数の戻り値
Java で ANTLR4 を使用しており、入力の解析中にルールが返す値を保存したいと考えています。私は次のような文法を使用します。
しかし、出力されたクエリの数 ($query.qs サイズ) は常に 1 です。これは、入力時に QUERY 要素が認識されるたびに $qs ArrayList に追加されるためですが、他の QUERY ごとに新しい ArrayList がインスタンス化され、このクエリがこの新しい ArrayList に追加されるためです。すべてのクエリが認識されると、 db : ルールのアクションが呼び出されますが、$query.qs ArrayList には最後のクエリしかありません。クエリを格納するグローバル ArrayLists を維持することで、この問題を解決しました。しかし、ルールが戻ってきて、独自のグローバルArrayListsを持っていない間に、ANTLRでそれを行う別の方法はありますか?
前もって感謝します、Dimos。
antlr4 - antlr4パーサーの再利用とウォームアップ
私のユースケースでは、生成された解析ツリーでビジターを使用して、数千の小さく独立した式をツリー表現に解析する必要があります。現在、解析操作ごとに新しいストリーム、レクサー、パーサーインスタンスが作成されています。
これは最適ではないかもしれないと思います。ANTLR4のウォームアッププロパティを利用するために、このようなセットアップでどのオブジェクトインスタンスを再利用できますか?スレッドセーフはどうですか?これらのインスタンスのどれがスレッドローカルである必要がありますか?レクサーまたはパーサーインスタンスを再利用するには、何らかのリセットが必要ですか?
antlr4 - ANTLR 4:ダイナミックトークン
与えられた:
たとえば、実行時にSTART_DELIM
変更する方法を知りたいのですが。END_DELIM
<%
%>
ANTLR 4でこれを行う方法を知っている人はいますか?
ありがとう。
maven - Maven をカスタマイズして、ビルド時に ANTLR4 文法 Java ファイルを自動的に作成する
Maven ビルドの最初のステップとして ANTLR4 文法をコンパイルするにはどうすればよいですか?
*.g4 ファイルから手動で文法を作成するのは非常に簡単です。Linux ではjava -jar /usr/local/lib/antlr-4.0-complete.jar grammarName.g4
、コンソールから実行するだけです。これにより、ビルドの次のステップでコンパイルする必要があるいくつかの Java ファイルが作成されます。
maven にすべての *.g4 ファイルを見つけてから、それらのすべてに対して上記のコマンドを実行し、さらにビルドを続行するように指示することは可能ですか? 文法のコンパイルが失敗すると、ビルドも失敗するはずです。
または、このタスクに対処できるプラグインはありますか?
私はすでにこの回答を見てきました - 欠点はIDEに依存することです。ビルドをできる限り IDE とシステムに依存しないようにしたい (Netbeans を使用しているため、与えられた答えは受け入れられない)。
編集
ベンゾニコの提案を試してみました。他の回答から参照されている pom.xml にリストされている依存関係を追加しました。私の pom.xml は次のようになります。
Javaファイルはg4ファイルから自動生成されますが、残念ながらエラーが多いです。これらは、手動でコンパイルしたときにクラスパスが間違っていたものと非常によく似ています。エラーの一部は次のとおりです。
antlr4 - antlr4-maven-plugin に関するヘルプを表示するにはどうすればよいですか
antlr4-maven-plugin は、Antlr4 Web サイトのドキュメントではないようです。
antlr4 - ANTLR 4 はプッシュ パーサーを生成できますか?
バイソンのように、ANTLR 4 はプッシュ パーサーを生成できますか? 参照: http://www.gnu.org/software/bison/manual/html_node/Push-Decl.html
データ変換パイプラインにパーサー ステージを実装するのに ANTLR が適しているかどうか疑問に思っています。システムの 1 つの構成は、ByteBuffers を上流にプッシュするソース ステージによって駆動されます。
「Definitive ANTLR 4 Reference」のコピーを購入しましたが、本をすばやく検索しても、このようなことについての言及は見つかりませんでした。
java - 式または変数名に含まれる言語固有の予約語の処理方法
私はこの問題に約4時間取り組んできました。これは、可能な限り単純な例になるように簡略化した ANTLR V4 文法ファイルです。
私のファイルには
で入力してこのファイルを解析しようとするとcomponent
、次のエラーが表示されます: mismatched input 'return' expecting Identifier
. このエラーが発生する理由がわかりません。
アップデート
私の理解が正しければ、これはreturn
Java の予約語であり、そのため文法がそのように構造化されているためです。私の言語では、Coldfusion Cfscriptは、スコープが, ,return
である限り有効です。これは、 、、および他の多くの単語にも当てはまります。これらはすべてスコープ内でのみ有効ですが、変数または式の最初の項としては有効ではありません:無効ですが、有効です。これは、それらを取得するパーサー規則と競合するため、これらの用語のすべてで同じ問題に遭遇することを意味します。local.return
variables.return
local["return"]
if
else
savecontent
if.blah = "something"
blah.if = "something"
バートが述べたことを総合すると、これはこの問題を解決するためのクリーンな方法ですか?
antlr - あるトークンの長さを別のトークンの値に依存させる方法は?
一部の長さが前のトークンの値に依存するバイナリ データをトークン化したいと考えています。次のように考えることができます。
長さは、バイナリ データの長さをバイト単位で示す 2 バイトの符号なし整数であるとします。
この相関関係を ANTLR 4 で実装するにはどうすればよいですか?
antlr - Antr3からAntr4への意味述語の翻訳
私のAntlr3文法では、次のレクサールールを使用して、「1YEAR4MONTHS」などの一定の日付期間を認識しました。
(クレジットが必要なクレジット、それはバート・キアーズから来ました)。
残念ながら、その構文はANTLR4ではなくなりました。だから、私は次のことを試みましたが失敗しました:
それも失敗しました。
誰かが私が新しいフォーマットに翻訳するのを手伝ってもらえますか?
ジェイソン
antlrworks - ANTLR4 のパーサーから解析済みデータにアクセスする
カスタム文法を使用して入力ファイルを処理し、トークンを抽出してHashMap
. rule()
ANTLR 3 では、パーサーでメソッドを呼び出して のHashMap
ようなものを取得することでファイルを解析できましたparser.record
。
これはANTLR 4では機能しないようです。本を参照したところ、parser.init()
解析を開始するには呼び出す必要があるようですが、パーサーにメソッドが表示されません。
ANTLRWorks 2 を使用してレクサー ファイルとパーサー ファイルを生成しました。私はリスナークラスを生成しませんでした。