問題タブ [antlr]
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.
regex - RegEx または Antlr、どちらを選択する必要がありますか?
文法要件に正規表現を使用しています。ただし、サポートが必要なパターンは約 20 以上あり、パターンが再帰的になり始めると、RegEx を維持することが非常に難しくなります。ANTLR への移行を試み、次の 2 つの重要な点を確認しました。
パフォーマンス いくつかの式が移行されたとき、パフォーマンスが懸念されるようです。コンパイルされたアセンブリを使用した RegEx は、一部の式で約 2 倍または 3 倍高速です。
管理性 ANTLR 文法は、管理と開発がはるかに簡単なようです。新しい式/構造への対応は、RegEx よりもはるかに簡単でした。
そのような移行について同様の経験をした人はいますか。それを見るべきですか、それとも RegEx を使用するべきですか?
.net - 推移的なアセンブリ参照を ILMerge で正常にマージできますか?
ILMerge を使用して、いくつかの推移的に参照されるアセンブリを参照しているアセンブリに内部化して、プロジェクト内の他の推移的な依存関係との競合を排除しようとしています。
特に、Antlr3.StringTemplateを参照しています (以降、AS と呼びます。ここから入手できます: http://www.stringtemplate.org/download.html )。Antlr3.Runtime.Debug (ARD) とAntlr3.Runtime (AR)を参照します。ARD自体もARを参照しています。アスキー アートでは、次のようになります。
私が使用している別のアセンブリである NHibernate 2.1 は、互換性のない別のバージョンの AR に依存しているため、ILMerge を使用して AR をマージし、AS に組み込みたいと考えました。理論的には、これでうまくいくと思います。ただし、理論を実行するのに問題があります。
どのような順列やオプションを試しても、次の形式のエラーが発生します。
ILMerge.Merge: アセンブリ 'Antlr3.Runtime.Debug' が正しくマージされませんでした。これは、ターゲット アセンブリの外部参照としてリストされたままです。
ILMergeで達成しようとしていることは可能ですか?
parsing - ANTLR vs. Happy vs. 他のパーサージェネレーター
私は 2 つの言語間の翻訳を書きたいと思っており、インターネットでいくつか読んだ後、ANTLR を使用することにしました。私はそれを一から学ばなければなりませんでしたが、左再帰を排除することでいくつかのトラブルを除けば、今まではすべてうまくいきました.
しかし、今日、Haskell ベースのパーサー ジェネレーターである Happy を調べるように言われた人がいました。私は Haskell の知識がないので、Happy が実際に ANTLR よりも優れているかどうか、そしてそれを学ぶ価値があるかどうか、いくつかのアドバイスを使用できます。
特に気になるのは、翻訳者がマクロ置換をサポートする必要があることです。これは、ANTLR で行う方法がまだわかりません。Happyの方がやりやすいかも?
または、他のパーサー ジェネレーターの方が優れていると思われる場合は、それらについてお知らせいただければ幸いです。
error-handling - ルールが失敗したときに antlr3 を強制的に終了させます
私は次のようなルールを持っています:
残念ながら、nullであるRuntimeObject
ため、コンストラクターで例外がスローされます。$label.text
デバッグ出力などを調べると、「ラベル」との一致が実際には失敗したことがわかりますが、Antlr ランタイムは、より役立つエラー メッセージを表示する目的で「役立つように」一致を続行します ( http://www.antlr.org /blog/antlr3/error.handling.tml )。
わかりました、これがいくつかの状況でどのように役立つかはわかりますが、どうすれば Antlr にそれをやめるように指示できますか? defaultErrorHandler=false
v2 からのオプションはなくなったようです。
parsing - JSP/ASP/PHP のような言語用の ANTLR パーサーを作成する方法は?
私はパーサージェネレーターを初めて使用し、JSP/ASP/PHP などの組み込み言語の ANTLR 文法がどのように見えるか疑問に思っていますが、残念ながら ANTLR サイトはそのような文法ファイルを提供していません。
より正確には、すべて (コード ブロックの外では意味を持たないキーワードを含む) に一致する AnyText トークンを定義する方法が正確にはわかりませんが、ブロック内でそれらを正しく認識できます。
たとえば、次の切り取りは、AnyText、BlockBegin、Keyword、BlockEnd、AnyText のようにトークン化する必要があります。
私のニーズにより適した別のパーサージェネレーターもあるかもしれません。ここstackoverflowで非常に人気があるため、私はこれまでANTLRしか試していません:)
よろしくお願いします!
parsing - ANTLRでレクサールールを「減算」する方法は?
次のような2つのルールがあるとしましょう。
ここで、という新しいルールを作成するとしprintable_no_newlines
ます。newline_characters
私はそうから引くことによってこれをしたいと思いますprintable_characters
:
その構文はANTLR3では機能しませんが、ルール全体を再入力せずにこれをエミュレートするための最良の方法を知っている人はいますか?
compiler-construction - ANTLR演算子の優先順位
ANTLRでは演算子の優先順位はどのように実装されていますか?
現在、XText/Antlrパッケージを使用しています。
編集:
sepp2kが提案したことを実行し、演算子の優先順位が機能するようになりましたが、3+*のようなものも機能するようになりました。オペレーターは基本的にツリーを「通り抜け」ます。
また、ANTLRのウェブサイトでC文法を試しましたが、ANTLRworksでも同じことが起こりました。
誰もが問題が何であるか知っていますか?
antlr - ANTLR再帰的あいまいさの問題
上記のシナリオでは、「または」は次のいずれかを介して到達できます
式->BINARYOP
また
EXPRESSION-> UNARYOP-> Expression-> BINARYOP
上記のようなあいまいさを取り除く体系的な方法はありますか?
antlr - 式のANTLR文法
式処理文法 (ネストされた括弧などを処理する) を実装しようとしています。これまでのところ、次のものがありますが、一部のケースに対応できません (成功/失敗のケースは、次のコード ブロックの後に表示されます)。何が起こっているか知っている人はいますか?
注: varname +=およびvarname =は、XText の追加の AST 生成ヘルパーにすぎません。今のところは気にしないでください。
そして、ここに解析/失敗のリストがあります:
maven-2 - maven-gunit-plugin を使用して JUnit ソースを生成する方法
maven-gunit-pluginを介してgunit (ANTLR 文法ユニット テスト ツール)を実行するように Maven を構成しました。ただし、gunit には 2 つの異なるモードがあります。最初のモードでは、gunit がインタープリターとして機能し、*.gunit (または *.testsuite) ファイルを読み取って解釈し、結果を表示します。次のように構成できます。
2 番目のモードでは、JUnit で実行できるソース コードが gunit によって生成されます。インタープリターとして機能する代わりに、maven-gunit-plugin に JUnit ソースを生成するように指示するにはどうすればよいですか?
いくつかのメモ:
- テスト フェーズを「generate-test-sources」に変更して、maven プラグインを正しい時間に実行することができます。
- maven-gunit-plugin に関する有用なドキュメントが見つかりませんでした
- exec-maven-pluginを使用して、特定のコマンド ライン オプションで gunit を実行する人を見てきましたが、私はそれを行うつもりはありません。
編集/解決:
さまざまな回答を読んだ後、maven-gunit-plugin を含む ANTLR ソース コードをダウンロードしました。プラグインは、 junit 生成をサポートしていません。現在、gunit-maven-plugin の codehaus スナップショットと exec プラグインが唯一のオプションであることが判明しました。