問題タブ [left-recursion]
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.
parsing - 文法から間接的な左再帰を削除する方法
相互に左再帰的な ANTLR コードがいくつかあります。
これを修正する方法についてのアイデアはありますか?
parsing - 式パーサーの文法と左結合性
私は、変数を使用して式のパーサーを作成し、それらを二次式の形式に単純化しようとしています。
これは私のパーサー文法です:
解析には、再帰降下パーサーを使用しています。これを解析したいとしましょう:
「2 - 1 + 1 = 0」
結果が 0 の場合、パーサーは間違ったツリーを作成します:
この文法を左結合にするにはどうすればよいですか? 私はこれが初心者です。より多くの情報を見つけることができるソースを教えてください。再帰降下パーサーでこれを達成できますか?
java - .jj ファイルで検出された左再帰
何がこれを本当に引き起こしているのかわかりません。ファイルをコンパイルしようとすると、「左再帰が式を検出しました... -> フラグメント... -> 式.
これを持つコードの領域はこのセクションです
この問題を解決する方法がよくわかりません。助けていただければ幸いです。ありがとう!
antlr4 - ANTLR 4 で相互左再帰を回避する方法
スカラー式とベクトル式を処理する文法を書いています。以下の文法は、スカラー式がベクトルから派生でき、ベクトルがスカラーから派生できるという問題を示すために単純化されています。たとえば、ベクトルは、リテラル[1, 2, 3]
またはスカラーとベクトルの積2 * [1, 2, 3]
( と同等[2, 4, 6]
) である可能性があります。スカラーは、リテラル2
またはベクトルへのインデックス[1, 2, 3][1]
( と同等2
) である可能性があります。
ANTLR4 でエラーが表示されます: The following sets of rules are mutually left-recursive [scalar, vector]
. scalar
参照とその逆であるため、これは理にかなっていますvector
が、同時に決定論的でなければなりません。
相互の (間接的な) 左再帰を避けるために、この文法をどのようにリファクタリングしますか? inplace という用語の 1 つを拡張することもできますが、それは完全な文法で多くの重複を招き、ベクトルとスカラーの代替がさらに多くなります。一次式を持つように文法をリファクタリングすることもできますscalar '*' scalar
が、有効なvector
代替手段として許可したくありません。他のオプションはありますか?
java - Java で NullPointerException を削除する
このコードは、指定された文法が再帰的に残されているかどうかを調べるために作成しました。プログラムをコンパイルするとNullPointerException
、行で表示されます
と
例外を削除するにはどうすればよいですか?
parsing - ラムダを追加すると左再帰が発生するのはなぜですか?
flex bison を使用して if 構文を書き込もうとしていますが、パーサーに問題があります
これは、cpp の if 構文の文法です。
これらの 3 つのルールを置き換えると、左再帰が発生する理由がわかりません。これらのルールにラムダを追加するだけです。
私が理解するのを手伝ってください。