問題タブ [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.

0 投票する
1 に答える
951 参照

antlr4 - それはANTLR4のEOFバグですか、それとも私のエラーですか

これは、ANTLR4 の文法を簡略化したものです (定数 false を使用して、 false を返すメソッドを置き換えていることに注意してください)。

私のテスト ファイルには"hello"という単語が 1 つだけ含まれており、テスト結果は次のようになります。

セマンティック述語 (ここではダミーですが) を代替として追加すると、「line 1:5 no viable alternative at input '< EOF >'」と言い続けるのはなぜですか? 偽のセマンティック述語を含む代替を削除すると、期待どおりにエラーが消えます。

PS: antlr-4.0-complete.jar を使用しています

0 投票する
1 に答える
236 参照

javascript - ECMAScript 代入式の左辺または右辺の決定

私は、ECMAScript ファイルのテキストのシンボル テーブルを構築する解析アプリケーションに取り組んでいます。私が抱えている問題は、ParseTreeListener.

これはChris Lambrou の ANTLR 文法を使用しており、これはECMAScript 仕様の公式文法とかなり密接に一致しているようです。と呼ばれるパーサー ルールがありleftHandSideExpressionますが、TestRig GUI に表示されると式の右側にも一貫して表示されるため、これは欺瞞的です。

これは訪問者パターンを必要とするタスクですか?

アドバイスに感謝します。

0 投票する
1 に答える
668 参照

antlr4 - JSON ライクな言語の文法

JSON に似た言語の文法を考案しようとしています。主な違いは、プロパティ名を二重引用符で囲む必要がないこと (二重引用符は使用できます)、および数値は整数のみである (浮動小数点数ではない) ことです。

これは一例です:

これは私の(試みた)文法です:

ただし、入力例で TestRig を実行しようとすると、

私が間違っているアイデアはありますか?

御時間ありがとうございます!

トゥオマス

0 投票する
2 に答える
15716 参照

antlr - 「パーサールールでの暗黙のトークン定義」は心配ですか?

ANTLR と ANTLRWorks 2 を使用して初めての文法を作成しています。文法自体はほぼ完成しています (記述された言語で記述されたコードを認識し、正しい構文木を構築します)。

私が心配しているのは、パーサー規則でトークンが最初に出現するたびに、「パーサー規則での暗黙のトークン定義」という黄色の波線で下線が引かれていることです。

たとえば、このルールで'var'は、波線があります。

正確にどのように見えるか:

ここに画像の説明を入力

奇妙なことに、ANTLR 自体はこれらのルールを気にしていないようです (テスト リグのテストを行っているとき、パーサー ジェネレーターの出力にこれらの警告が表示されません。マシンにインストールされている Java バージョンが正しくないということだけです)。 ANTLRWorks が不平を言っているだけです。

心配する必要がありますか、それともこれらの警告を無視する必要がありますか? すべてのトークンをレクサー規則で明示的に宣言する必要がありますか? 公式バイブルThe Defintive ANTLR Reference のほとんどの例は、私がコードを書いた方法とまったく同じように行われているようです。

0 投票する
1 に答える
2006 参照

c++ - C++ ソースの解析時の AN​​TLR4 相互左再帰エラー

cpp ソース構文のサブセットを解析しようとしています。次の ANTLR4 パーサー ルールは、C++ 言語仕様から直接コピーされます (ただし、ハイフンはアンダースコアに置き換えられます)。

しかし、org.antlr.v4.Tool が文法を解析しているときに、次のエラーが発生しました。

error(119): cppProcessor.g4::: 次の一連のルールは相互に左再帰的です [direct_abstract_declarator]

direct_abstract_declarator ? 左側の構文でエラーが発生します。どのように修正すればよいですか?ANTLR4 がサポートできないのはなぜですか?

ルールを手動でこの形式にリファクタリングしても、エラーは発生しません。

左再帰ルールを処理するときに、ANTLR4 が最初の構文を直接サポートすることは可能ですか?

0 投票する
1 に答える
60 参照

antlr4 - データムスキップコメント「#;」ANTLR4でR6RSのパーサーを作りながら

R6RS 用のレクサー/パーサーを作成しようとしていますが、データをスキップするコメントに悩まされています。

これが私のレクサー/パーサールールの一部です:

では、 のように書きたいと思いskipDatum: '#;' datum -> skipます。残念ながら、パーサー ルールでは許可されていません->skipSKIPDATUM: '#;' datum -> skipレクサー規則はパーサー規則を参照できないため、どちらも機能しません。

私の意見では、「コメントアウト」はレクサーの責任であり、「データムの構築」はパーサーの責任ですが、ルールに関するルールには#;両方が必要です。

これが私の現在の解決策です:

それが機能している間、それはとても醜いようです。を使用してルールを書きたい場合datumは、常に次のように書く必要があります。skipDatum* datum skipDatum*

より良い解決策はありますか?前もって感謝します。

0 投票する
1 に答える
554 参照

antlr4 - ANTLR4 解析ツリーをシリアライズ可能にする

ANTLR4 で生成された解析ツリーを保存することはできますか? たとえば、ParseTree またはそのサブクラスをシリアライズ可能にします。

プロジェクトのソース ファイルを解析するために ANTLR4 を使用したいと考えています。私のプロジェクトは非常に大きく、何百ものソース ファイルが含まれています。通常、必要な情報を取得するには、いくつかのソース ファイルの解析ツリーをたどる必要があります。完全な文法は非常に巨大で、たった 1 つのソース ファイルを解析するだけでも時間がかかります。そのため、1 つの情報 (関数の呼び出し元など) を取得するために、ツールを起動するたびにすべてのソース ファイルを再度解析するのは現実的ではありません。一度解析して、パーサーの出力をハードディスクに保存できればいいのですが。

0 投票する
1 に答える
1733 参照

grammar - 端子をセットにグループ化

端末をセットにグループ化する

この警告はどういう意味ですか? どうすれば解決できますか?

これが私が参照しているコードです