問題タブ [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.
bison - この S/R 競合を解決する方法
以下は、私の作業中の EBNF 文法の単純化です。
\n と EOF の両方がトークンとして NEWLINE を吐き出します (EOF の前に単一の末尾の NEWLINE が必要ないように)。次のようなストリームで動作します。
少なくとも 1 つが必須で、残りは で区切られてline
います。例えば:block
NEWLINE
私はこれをやってみました:
しかし、先読みが の場合、Jison は S/R 競合について不平を言いNEWLINE
ます。NEWLINE
ステート マシンは、が新しいブロックの一部なのline
か、最後のNEWLINE*
ブロックなのかを判断するのに混乱していると思いfile
ます (ファイルが NEWLINE/EOF で終わる可能性があるため、これが必要です)。
どうすればこれを修正できますか?
compiler-construction - リデュース/リデュース コンフリクトの削除
ML-Yacc で定義されているように、次の文法を持つ言語用のコンパイラを作成しました (開始記号は、下部に定義されている「プログラム」です)。
この文法は問題ありませんが、ここでパラメトリック ポリモーフィズムを導入したいので、次の生成を文法に追加します。
そして今、次の2つの削減/削減の競合が発生していますが、解決方法がわかりません
これら2つの競合をどのように削除するか教えてもらえますか?
編集: これは mlyacc http://pastebin.com/2w26ytuVからの完全な .desc 出力です。これも 2 つの無害なシフト/リデュース エラーを示しているわけではありません
parsing - 永続的なシフト - Goldparser で競合を減らす
Goldparser で Shift-Reduce の競合が発生して困っています。
理論的には、次のスクリプトを解析できる PHP のような文法を作成しました。
一番上にグローバル変数を割り当て、その後に関数定義を配置します。
問題を絞り込むために、エラーを再現できる次の行に大きな文法を減らしました。明らかにこれは不完全です。関数にはパラメーターも戻り値もステートメントもありません...
LALR テーブルを構築するとき、Goldparser は次のように教えてくれます。
「Shift-Reduce Conflict が修正されました。'private'、'protected'、'public' は完全なルールに従い、シフトすることもできます。この競合は、'reduce' よりも 'shift' アクションを選択することで解決されました。注意してください。一部の文法にアクセスできない可能性があります。すべての競合を削除することをお勧めします。"
しかし、適用される修正により、文法が正しく機能しなくなります。上記の例では、オプションとして宣言したにもかかわらず、' '、' '、または ' ' が必要function Main()
な場所で構文エラーが発生します。private
protected
public
定義または定義<ModifierOpt>
からを削除すると、エラーは消えます。<FuncDef>
<GlbAssignVar>
これを解決する方法がわかりません。助けてください!
sas - bison の空のルールによる Shift Reduce エラー
以下の yacc 文法があります。
空のルールの場合、シフト/縮小エラーが発生します。エラーの Y.output ファイルは次のようになります。
誰かが問題を解決する方法を提案できますか?
recursion - 再帰規則によるシフト/リデュース
flex と bison を使用して、特定の言語のミニ コンパイラを作成しようとしています。再帰を含むルールを忘れていたことに気付くまで、それは正常に機能していました。ルールは次のとおりです。
追加したところ、理解できないシフト/削減の競合がありました。私の文法は曖昧ではありません
これが私の文法の簡略版です。
基本的に、DATAブロックで定数とともに文字を定義できると言っています
これが私の.outputです
シフト/リデュースの競合が状態 11 と 13 にあると表示されますが、その理由が正確にわかりませんでした。次のようなものを認識するはずです。
parsing - バイソン文法のシフト/リデュース競合を修正
テキスト ファイルを解析するために私が書いた bison 文法では、10 個のシフト/リデュースの競合が発生します。parser.output ファイルは十分に役に立ちません。ファイルは次のような情報を提供します:
私の文法の同等の部分は次のとおりです。
これを修正するのを手伝ってください..
ありがとう
grammar - バイソンの文法はときどき合格し、ときどき失敗する
私は初めて Bison 文法を幅広く扱っています。文法をセットアップし、結果を相関させるための小さなテスト スイートを用意しました。
場合によっては、テスト スイートに合格することがあります。
場合によっては、次のことが行われません。
ENDMATH
は、シフト先の正しいトークンですが、場合によってMN
は決定されます。テストを実行するたびに一貫性のない結果が得られます。そのような「ランダムな」あいまいさは正常ですか? 何が原因でしょうか?%precedence
いくつかのルールを定義する必要がありますか?
y.outputの上部に、次のような状態の競合がいくつか見られます
これらの競合をすべて排除することをお勧めしますか? 状態 120 は競合があるとリストされており、このランダム エラーが発生する直前の状態であることに注意してください。