問題タブ [shift-reduce-conflict]
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 - バイソンの競合をシフト/削減する
私は初めてでBison
、シフト/削減の競合に問題があります...ファイルから次の場所にロードしようとしていますarray data[]
:
ここに私のバイソンコードの一部があります:
次のエラーが表示されます。
私がどこで間違ったのか分かりますか?
python - 私の文法のあいまいさはどこにありますか?
次のあいまいな文法があります。大文字の規則は単純な語彙トークン用です。
8 つの shift/reduce エラーを受け取ります (Python 2.7 と PLY を使用している場合)。
あいまいさは、「1つ以上」を定義する方法の結果ですか? block : expression | expression block
?
parsing - PLY 文法でこの shift-reduce 競合を修正するにはどうすればよいですか?
私はプログラミング言語の文法を書いていますが、真っ先にシフト/リデュースの問題に直面しています。問題は次の状態にあります。
もう少し詳しく説明する前に、次のことを明確にしたいと思います。
関数を呼び出しているのか、ID を値 (定数または変数など) として使用しているかをプログラムが判断できないため、これはシフト/リデュースですか?
続けて、これを修正することは可能ですか?私の言語では現在、行区切り記号 (C の ';' や Python の '\n' など) を使用していません。パーサーは LALR(1) です。
関数呼び出しと行区切り文字を含む変数を解読する最も効率的な (文法に追加する規則が最も少ない) 方法は何ですか?
編集: これがその状態の先読みです。
parsing - LALR(1) 文法は、変数と関数呼び出しをどのように区別しますか?
次の入力があるとします。
と
LALR(1) 文法でシフト/リデュースの競合を回避する方法はありますか? shift/reduce 競合により、 で削減するy
か、 まで継続するかが決定されてい(
ます。
(これは、変数名が英数字の任意のセットであり、関数呼び出しが括弧が続く任意の英数字のセットであると想定しています。)
parsing - 三項演算子が shift-reduce 競合を引き起こすのはなぜですか?
以下は私の文法です:
この状態で shift-reduce エラーが発生します。
私は紛争がそれであると信じています
true ? 1 : (false ? 3 : 2)
またはとして解釈できます(true ? 1 : false) ? 3 : 2
。
、 の優先順位を+
左結合で、 (右結合に設定した)-
よりも高いレベルに設定しました。?
私は何を間違っていますか?
parsing - 文字列連結のための LALR 文法
式を連結して文字列を形成できるように、連結された文字列を解析しようとしました。あれは、
上記は正しく解析する必要があります。問題は、+
シフト削減の競合につながることです。私は次の文法を使用しています。
+
shift-reduce 競合を引き起こさない文法を見つけようとしても成功していません。この文法を LALR にする方法があることを願っています。それを見つけるための助けをいただければ幸いです。
cygwin - if ... else ステートメントとのシフト/競合の削減
Javaライクな言語でパーサーを作ろうとしていますが、else文でシフト/リデュースの競合が発生します。バイソンを試してみbison_file.y --report=state
ましたが、競合に関する結果は次のとおりです。
状態 62 31 ステートメント: if_statement 。65 if_else_statement: if_statement . ELSE ステートメント ELSE シフトし、ステート 84 に移動 ELSE [ルール 31 (ステートメント) を使用して削減] $default ルール 31 (ステートメント) を使用して削減
紛争を回避する方法が思い浮かびません。良いアイデアはありますか?ここでは、完全なコードを提出します。
parsing - ミニ Java 用のパーサーを構築しようとしていますが、式の文法部分でシフト/リデュースの競合が発生しています。この競合を解決できません。
これは y.output ファイルの一部です
状態 65
15式:式。"&&" 表現
16 | 表現 。「<」式
17 | 表現 。「+」表現
18 | 表現 。"-" 表現
19 | 表現 。"*" 表現
20 | 表現 。"[" 表現 "]"
21 | 表現 。「。」"長さ"
22 | 表現 。「。」識別子 "(" 式 "," 式 ")"
25 | 「!」表現 。
これは、演算子の優先順位が設定される方法です