問題タブ [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 投票する
3 に答える
3560 参照

sockets - 終わりのないストリームからのデータを解析するための Antlr の使用

Antlr は、解析するテキストの直後に EOF がないストリームからのデータの解析に適していますか? 私の観察によると、レクサーは次のトークンの最初の文字が受信されるまで現在のトークンを発行しません。その上、次のルールの最初のトークンが受信されるまで、パーサーはルールを発行しないようです。これが私が試した簡単な文法です:

次に、生成されたパーサーを UnbufferedCharStream と UnbufferedTokenStream で使用しました。

ストリームが「クイック」になると、何も起こりません。

' b ' が入ったとき - 入力ルール ' fox '

then ' roun ' - 何もない (2 つのトークンがストリームにある - それらのどれもまだ leser することが知られていない!)

' f ' の後でのみ、リスナーは最初のトークン ' quick 'にアクセスします。

then - ' ox 'には何もありません

新しい行 (unix): トークン ' brown 'にアクセスしてください

これで、ストリームにはすべてのデータ (4 つのトークン) が含まれていますが、認識されるのは 2 つのトークンのみです。

これらのトークンをシステムにプッシュするために、ストリームは 2 つのトークンを発行できることがわかりました。これは、文法で認識されている任意のトークンです。2 つの余分な新しい行、または ' fox ' と ' Brown ' としましょう。その後、トークン ' fox ' と ' \n ' が訪問され、パーサーはルール ' fox ' を終了し、解析が終了します。

それはバグですか、それとも機能ですか?そのラグをなくす方法はありますか?

ありがとう!

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

java - さまざまなモードを使用するANTLR4レクサー文法をインポートします

レクサー文法を別のレクサー文法にインポートしようとしています。インポートされた文法は、異なるモードを使用します(XMLLexerの例ではモードINSIDEおよびPROC_INSTR)。

コンパイル時に、モード名に対応する変数が定義されていないというエラーが表示されます。

具体的な例として、(antlr4ブックの)XMLLexerの上にHTMLLexerを定義すると、次のエラーが発生します。

トップレベルのレクサーのモードを追加のトークンで再定義することでこのエラーを克服できますが、他のモード内にインポートされたトークンは、デフォルトとして認識されません。

インポートされた部分をメインのレクサー定義にインライン化するとパーサーは機能しますが、インポート機能を使用して明確に分離したいと思います。(xml / htmlの例ではありませんが、別の場合です。)

インポートを使用して動作させることは可能ですか、それともantlr4の制限ですか?

0 投票する
0 に答える
1200 参照

antlr4 - 引数を使用してルールをテストする

バリアントをチェックするために、パーサーでいくつかのサブルールをテストしようとしています。チェックしているルールは式ルールです

生成された解析では、メソッド シグネチャは次のとおりです。

_p 引数として渡す値がわかりません。

パーサーで式メソッドの呼び出しを確認すると、0 が渡されていることがわかります。ただし、parser.expression(0) を直接呼び出そうとすると、null ポインター例外が発生します。

単体テストを有効にするためにこのサブルールを呼び出す推奨される方法は何ですか?

参考までに、私が書こうとしている単体テスト リグのコードを次に示します。

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

antlr4 - ANTLR追記ツリー

antlr4 TestRig を使用-psすると、PostScript ツリーを生成できます。ツリーが表示されません。

追記:

GhostView のエラー:

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

eclipse - ANTLR4とMavenでlexer+parserを自動的に生成する方法は?

私は ANTLR4 が初めてで、v4 用の Eclipse プラグインがないようです。したがって、.g4 文法から Java ソースを自動的に構築するとよいでしょう。src/main/java、src/test/java を使用した単純な空の Maven プロジェクトがあります。.g4 ファイルをどこに配置しますか? Maven で文法を自動的に構築するにはどうすればよいですか?

私自身のPOMテストが失敗しました:

エクリプス 言います:

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

antlr4 - ANTLR4: すべての入力候補を 1 回だけ一致させる

ANTLR で、すべての選択肢を任意の順序で 1 回だけ一致させるルールを作成するにはどうすればよいですか?

すなわち

次のルールに移る前に、'example' と 'example2' が 1 回だけ一致するようにします。

次の入力と一致する必要があります。

また

ただし、次の入力ではありません:

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

antlrworks - インポートされた文法からのレクサーモードは、結合された文法では識別されません。'run intestRig'Antlrworks2をクリックした後のコンパイルエラー

私はAntlrworks2を使用しています。「字句モード」が定義されている字句文法があります。レクサー文法をインポートする文法を組み合わせました。結合された文法からコードを生成した後、2つの.javaファイルを生成します。例:結合された文法ファイル名が「xyz.g4」の場合、Javaファイル名は「xyzLexer.java」、「xyzParser.java」です。しかし、Antlrworks2で[TestRigで実行]をクリックすると、コンソールで以下のエラーが発生します。

CDFCombinedGrammarLexer.java(上記の例ではxyzLexer.java)で観察したように、「字句モード」のコードは存在しません。実際のレクサーファイルから生成されたJavaファイルでモードのコードを見つけることができました。

以下は、実際のレクサーで生成されたJavaファイルで確認できるコードです。

これに関する助けはありますか?お待ちしております!!!

前もって感謝します!

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

antlr4 - ANTLR4:リスナーの特定のルールのトークンのリストを取得する

ANTLR4でリスナーを拡張していますが、パーサーの特定のルールに関連付けられているすべてのトークンを取得したいのですが、それを行う方法はありますか?

すなわち

解析ルールの値CONFIGを検索するようにリスナーに指示するにはどうすればよいですか?EQUALSmyConfiguration

使用できるある種のforループはありますか?

パーサークラスを介してトークンのリストがあることはわかりますが、現在のルールに関連付けられているトークンのリストが見つかりません。

私がこれを求めている理由は、リスナーと文法で必要なトークン名を再入力することを避けるためです。そうすることで、名前を手動で入力しなくても、その特定のルールの各トークンタイプが見つかったかどうかを確認できます。

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

antlr4 - ANTLR4:ツリー構造

baseClassリスナーを拡張し、いくつかの値を読み込もうとしていますが、順序に階層がないようです。

私の文法の縮小版は次のとおりです。

ただし、この実装の解析ツリーはconfig_optionsレベル(ターミナルレベル)でフラットです。つまり、ルールの開始にはconfig_optionsの子が多数ありますが、EQUALSはconfig_optionsのサブツリーのルートではなく、すべてのTOKENSのルートノードとしてルールconfig_optionsがあります。代わりに、端末の1つをルートノードにするにはどうすればよいですか?

この特定のルールでは、スペースをキャプチャしたくありません。レクサーに向けられた->スキップがあることはわかっていますが、スペースが必要な場合もあります。つまり、文字列'"'(ALPHANUM |'')'"'

(注:^は機能していないようです)

入力の例は次のとおりです。

key = abcdefg

key = 90weata

key = acbefg9

私がやりたいのは、キーと値のペアを抽出することだけです。'='がルートになり、2つの子がキーと値になると思います。

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

parsing - ANTLR4整数解析が失敗する

antlr 4でファイルを解析しようとしていますが、1桁を超える整数が解析されない理由がわかりません(79:44行目入力「17」で実行可能な代替手段がありません)。

これはエンティエ文法ですhttp://pastebin.com/rxktvUBi

これがintの定義です

これはまったく機能しません。このバージョン

1桁の整数に対してのみ機能します。

これは、分割されていない行の例です

問題は

識別子を使用する場合は注意してください

整数の代わりに

それは動作します。

なんで?何か案が?