問題タブ [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のEOFバグですか、それとも私のエラーですか
これは、ANTLR4 の文法を簡略化したものです (定数 false を使用して、 false を返すメソッドを置き換えていることに注意してください)。
私のテスト ファイルには"hello"という単語が 1 つだけ含まれており、テスト結果は次のようになります。
セマンティック述語 (ここではダミーですが) を代替として追加すると、「line 1:5 no viable alternative at input '< EOF >'」と言い続けるのはなぜですか? 偽のセマンティック述語を含む代替を削除すると、期待どおりにエラーが消えます。
PS: antlr-4.0-complete.jar を使用しています
javascript - ECMAScript 代入式の左辺または右辺の決定
私は、ECMAScript ファイルのテキストのシンボル テーブルを構築する解析アプリケーションに取り組んでいます。私が抱えている問題は、ParseTreeListener
.
これはChris Lambrou の ANTLR 文法を使用しており、これはECMAScript 仕様の公式文法とかなり密接に一致しているようです。と呼ばれるパーサー ルールがありleftHandSideExpression
ますが、TestRig GUI に表示されると式の右側にも一貫して表示されるため、これは欺瞞的です。
これは訪問者パターンを必要とするタスクですか?
アドバイスに感謝します。
antlr4 - JSON ライクな言語の文法
JSON に似た言語の文法を考案しようとしています。主な違いは、プロパティ名を二重引用符で囲む必要がないこと (二重引用符は使用できます)、および数値は整数のみである (浮動小数点数ではない) ことです。
これは一例です:
これは私の(試みた)文法です:
ただし、入力例で TestRig を実行しようとすると、
私が間違っているアイデアはありますか?
御時間ありがとうございます!
トゥオマス
antlr - 「パーサールールでの暗黙のトークン定義」は心配ですか?
ANTLR と ANTLRWorks 2 を使用して初めての文法を作成しています。文法自体はほぼ完成しています (記述された言語で記述されたコードを認識し、正しい構文木を構築します)。
私が心配しているのは、パーサー規則でトークンが最初に出現するたびに、「パーサー規則での暗黙のトークン定義」という黄色の波線で下線が引かれていることです。
たとえば、このルールで'var'
は、波線があります。
正確にどのように見えるか:
奇妙なことに、ANTLR 自体はこれらのルールを気にしていないようです (テスト リグのテストを行っているとき、パーサー ジェネレーターの出力にこれらの警告が表示されません。マシンにインストールされている Java バージョンが正しくないということだけです)。 ANTLRWorks が不平を言っているだけです。
心配する必要がありますか、それともこれらの警告を無視する必要がありますか? すべてのトークンをレクサー規則で明示的に宣言する必要がありますか? 公式バイブルThe Defintive ANTLR Reference のほとんどの例は、私がコードを書いた方法とまったく同じように行われているようです。
c++ - C++ ソースの解析時の ANTLR4 相互左再帰エラー
cpp ソース構文のサブセットを解析しようとしています。次の ANTLR4 パーサー ルールは、C++ 言語仕様から直接コピーされます (ただし、ハイフンはアンダースコアに置き換えられます)。
しかし、org.antlr.v4.Tool が文法を解析しているときに、次のエラーが発生しました。
error(119): cppProcessor.g4::: 次の一連のルールは相互に左再帰的です [direct_abstract_declarator]
direct_abstract_declarator ? 左側の構文でエラーが発生します。どのように修正すればよいですか?ANTLR4 がサポートできないのはなぜですか?
ルールを手動でこの形式にリファクタリングしても、エラーは発生しません。
左再帰ルールを処理するときに、ANTLR4 が最初の構文を直接サポートすることは可能ですか?
antlr4 - データムスキップコメント「#;」ANTLR4でR6RSのパーサーを作りながら
R6RS 用のレクサー/パーサーを作成しようとしていますが、データをスキップするコメントに悩まされています。
これが私のレクサー/パーサールールの一部です:
では、 のように書きたいと思いskipDatum: '#;' datum -> skip
ます。残念ながら、パーサー ルールでは許可されていません->skip
。SKIPDATUM: '#;' datum -> skip
レクサー規則はパーサー規則を参照できないため、どちらも機能しません。
私の意見では、「コメントアウト」はレクサーの責任であり、「データムの構築」はパーサーの責任ですが、ルールに関するルールには#;
両方が必要です。
これが私の現在の解決策です:
それが機能している間、それはとても醜いようです。を使用してルールを書きたい場合datum
は、常に次のように書く必要があります。skipDatum* datum skipDatum*
より良い解決策はありますか?前もって感謝します。
antlr4 - ANTLR4 解析ツリーをシリアライズ可能にする
ANTLR4 で生成された解析ツリーを保存することはできますか? たとえば、ParseTree またはそのサブクラスをシリアライズ可能にします。
プロジェクトのソース ファイルを解析するために ANTLR4 を使用したいと考えています。私のプロジェクトは非常に大きく、何百ものソース ファイルが含まれています。通常、必要な情報を取得するには、いくつかのソース ファイルの解析ツリーをたどる必要があります。完全な文法は非常に巨大で、たった 1 つのソース ファイルを解析するだけでも時間がかかります。そのため、1 つの情報 (関数の呼び出し元など) を取得するために、ツールを起動するたびにすべてのソース ファイルを再度解析するのは現実的ではありません。一度解析して、パーサーの出力をハードディスクに保存できればいいのですが。
grammar - 端子をセットにグループ化
この警告はどういう意味ですか? どうすれば解決できますか?
これが私が参照しているコードです