問題タブ [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.
antlr4 - Antlr4 の優先順位と結合性
などの式の解析に興味があります(B32|B5)&B31
。私の目標は、この式が評価される順序を見つけることです。だから私の期待される結果はその時そして最後になるB2
でしょ|B5
う&B31
私の式には特殊文字を含めることができます。、および。*
_ したがって、exp は になります。この場合、最初に評価され、次に.=
{
B31*{A1,A2}|B35
B31*{A1,A2}
B35
以下の文法を作成しました。
ビジターが生成されるように上記Expr.g4
をコンパイルしました。-visitor
次に、ビジター クラスを作成して、各式をウォークスルーし、それをリストに取り込みます。
EvalExpression
クラスは次のとおりです
Value
以下のとおりであります
最後に、トークンのリストとそれらを調べる必要がある順序を出力するテスト プログラムを作成しました。
私の質問は、いつ実行EvalExprTest
し、プログラムでそれをテストするかString src = "(B32|B5)&B31"
です。次の結果が得られます。
私の目標は、括弧内の式が最初に評価されるような優先順位を得ることでした。しかし、常に右端の式からツリーを通り抜けるように見え、この場合はB31
.
誰か助けてくれませんか?文法は正しいですか?Visitor の実装は正しいですか?
antlr4 - ANTLR4 を使用して AST を構築するにはどうすればよいですか?
抽象構文ツリーを構築する ANTLR3 文法があります。ANTLR4へのアップグレードを検討しています。ただし、ANTLR4 は解析ツリーのみを構築し、抽象構文ツリーは構築しないようです。たとえば、output=AST
オプションが認識されなくなりました。さらに、「The Definitive ANTLR4 reference」のテキストには「AST」も「抽象構文」も登場しません。
私は何かが欠けているのだろうかと思っています。
私のアプリケーションは現在、ANTLR3 によって生成された AST をクロールする方法を認識しています。解析ツリーを処理するように変更することは不可能ではありませんが、少し手間がかかります。その道を歩み始める前に、それが必要であることを確認したい.
antlr4 - Antlr4 式の評価順序をキャプチャする方法
私は次の文法を持っています
評価される式のノードを抽出し、評価される順序で必要とします。したがって、1*{A42,A53,A16,A3}&(A26|A41)&(A51=P&A2=F|A7=C) のような式の場合、次の順序で評価されます。
主な関心事は、式が評価される順序を理解することです。
これについてどう思いますか。訪問者の実装を書いてみましたが、注文を抽出する方法がわかりません。
java - ANTLR4 を Java に統合する
ANTLR4 で文法を生成してコンパイルしました。コマンドライン経由でエラーがあるかどうかを確認できますが、このパーサーを Java プログラムに正常に統合する際に問題が発生しています。JAR を Eclipse のライブラリに追加したため、ANTLR4 メソッドを使用できますが、トークン テキストを取得したり、何らかの意味のある方法でエラーが生成されているかどうかを確認したりすることはできません。どんな助けでも大歓迎です。どうしても曖昧な場合はお知らせください。詳しく説明します。
以前のバージョンを見ると、compileUnit() のようなものと同等のメソッドが必要な場合があります。
c# - C# 4.0 Antlr4 ランタイム
他の非Javaランタイム、特にC#4.0が利用可能になるのはいつですか。
Antlr 3.0 の以前のバージョンでは、ほとんどすべての一般的なプログラミング言語のランタイムが提供されていました。
performance - 文法とantlr4のパフォーマンスの問題
私はantlr 4を初めて使用し、文法を書いたことがありません。文法は短いサンプルに対してうまく機能するように見えますが、完了せずに一晩実行される長いサンプルがいくつかあります。入力ファイルで TestRig を使用しています。私は JVisualVM を使用し、コードがほとんどの時間をここで費やしていることを観察しました。
この問題は、次の形式のステートメントの量に関連していると思われます。
これらの 12 から 72 の間のどこかで問題が発生します
私はjvmに2Gのメモリを与えましたが、1G未満しか使用していません。ヒープは拡大縮小するので、メモリリークはないと思います。
このようなものをデバッグする方法について何かアドバイスはありますか?
ファイルを添付する方法がわかりません。スタック トレースは 422 行で、ほとんどが 1278 と 1325 を繰り返しています。TestRig を理解していないので、何をしているのかわかりません。見つけられれば、antlr-4.0-complete.jar のソース コードを取得します。
テストケースとして使用するために、簡略化された文法に取り組み始めました。この演習は、文法から取り除いたいくつかの奇妙な点を特定するのに役立ちました. これにより、削除された文法の問題は解決されましたが、完全な文法を復元すると、パフォーマンスの問題が再発しました。
単純な比較の発生回数を増やすと、処理時間が非線形に増加するのは、私には本当に奇妙に思えます。「TOKEN = "SOMESTRING" OR TOKEN = "SOMEOTHERSTING"」のいくつかのインスタンスは比較的迅速に処理されますが、これらの比較が 75 あると、処理時間が非常に長くなります。
antlr4 のソースがどこかにあるかどうかはわかりません。コードをステップ実行して、何が起こっているかを確認するとよいでしょう。
このプロセスを繰り返して、結果がどうなるか見てみようと思います。
java - ANTLR4で解析ツリーをたどっているときにエラーを処理する慣用的な方法は何ですか?
私は ANTLR4 を使い始めたばかりで、解析ツリーをたどるリスナーを作成中です。Parser
また、インスタンスにカスタム エラー リスナーを追加しました。ParseTreeWalker.walk()
これに基づいて構築するには、呼び出し中に報告するエラーがパーサーのエラー リスナーにも送信されるようにしたいと考えています。それを呼び出しParser.getErrorListeners()
てリスナークラスに注入できることに気づきましたが、もう少し組み込みのものが欲しいと思っていました。
私がそれに取り組んでいる間、エラーを報告するときに特定のノードの行と列の番号を決定する手段が必要です。リスナーやビジターが見つけたエラーを報告することに関しては、誰もが自分の思い通りになるのでしょうか?