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

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

bison - この S/R 競合を解決する方法

以下は、私の作業中の EBNF 文法の単純化です。

\n と EOF の両方がトークンとして NEWLINE を吐き出します (EOF の前に単一の末尾の NEWLINE が必要ないように)。次のようなストリームで動作します。

少なくとも 1 つが必須で、残りは で区切られてlineいます。例えば:blockNEWLINE

私はこれをやってみました:

しかし、先読みが の場合、Jison は S/R 競合について不平を言いNEWLINEます。NEWLINEステート マシンは、が新しいブロックの一部なのlineか、最後のNEWLINE*ブロックなのかを判断するのに混乱していると思いfileます (ファイルが NEWLINE/EOF で終わる可能性があるため、これが必要です)。

どうすればこれを修正できますか?

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

compiler-construction - リデュース/リデュース コンフリクトの削除

ML-Yacc で定義されているように、次の文法を持つ言語用のコンパイラを作成しました (開始記号は、下部に定義されている「プログラム」です)。

この文法は問題ありませんが、ここでパラメトリック ポリモーフィズムを導入したいので、次の生成を文法に追加します。

そして今、次の2つの削減/削減の競合が発生していますが、解決方法がわかりません

これら2つの競合をどのように削除するか教えてもらえますか?

編集: これは mlyacc http://pastebin.com/2w26ytuVからの完全な .desc 出力です。これも 2 つの無害なシフト/リデュース エラーを示しているわけではありません

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

parsing - 永続的なシフト - Goldparser で競合を減らす

Goldparser で Shift-Reduce の競合が発生して困っています。

理論的には、次のスクリプトを解析できる PHP のような文法を作成しました。

一番上にグローバル変数を割り当て、その後に関数定義を配置します。

問題を絞り込むために、エラーを再現できる次の行に大きな文法を減らしました。明らかにこれは不完全です。関数にはパラメーターも戻り値もステートメントもありません...

LALR テーブルを構築するとき、Goldparser は次のように教えてくれます。

「Shift-Reduce Conflict が修正されました。'private'、'protected'、'public' は完全なルールに従い、シフトすることもできます。この競合は、'reduce' よりも 'shift' アクションを選択することで解決されました。注意してください。一部の文法にアクセスできない可能性があります。すべての競合を削除することをお勧めします。"

しかし、適用される修正により、文法が正しく機能しなくなります。上記の例では、オプションとして宣言したにもかかわらず、' '、' '、または ' ' が必要function Main()な場所で構文エラーが発生します。privateprotectedpublic

定義または定義<ModifierOpt>からを削除すると、エラーは消えます。<FuncDef><GlbAssignVar>

これを解決する方法がわかりません。助けてください!

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

sas - bison の空のルールによる Shift Reduce エラー

以下の yacc 文法があります。

空のルールの場合、シフト/縮小エラーが発生します。エラーの Y.output ファイルは次のようになります。

誰かが問題を解決する方法を提案できますか?

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

recursion - 再帰規則によるシフト/リデュース

flex と bison を使用して、特定の言語のミニ コンパイラを作成しようとしています。再帰を含むルールを忘れていたことに気付くまで、それは正常に機能していました。ルールは次のとおりです。

追加したところ、理解できないシフト/削減の競合がありました。私の文法は曖昧ではありません

これが私の文法の簡略版です。

基本的に、DATAブロックで定数とともに文字を定義できると言っています

これが私の.outputです

シフト/リデュースの競合が状態 11 と 13 にあると表示されますが、その理由が正確にわかりませんでした。次のようなものを認識するはずです。

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

parsing - バイソン文法のシフト/リデュース競合を修正

テキスト ファイルを解析するために私が書いた bison 文法では、10 個のシフト/リデュースの競合が発生します。parser.output ファイルは十分に役に立ちません。ファイルは次のような情報を提供します:

私の文法の同等の部分は次のとおりです。

これを修正するのを手伝ってください..

ありがとう

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

grammar - バイソンの文法はときどき合格し、ときどき失敗する

私は初めて Bison 文法を幅広く扱っています。文法をセットアップし、結果を相関させるための小さなテスト スイートを用意しました。

場合によっては、テスト スイートに合格することがあります。

場合によっては、次のことが行われません。

ENDMATHは、シフト先の正しいトークンですが、場合によってMNは決定されます。テストを実行するたびに一貫性のない結果が得られます。そのような「ランダムな」あいまいさは正常ですか? 何が原因でしょうか?%precedenceいくつかのルールを定義する必要がありますか?

y.outputの上部に、次のような状態の競合がいくつか見られます

これらの競合をすべて排除することをお勧めしますか? 状態 120 は競合があるとリストされており、このランダム エラーが発生する直前の状態であることに注意してください。