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

yacc - yacc 文法で shift-reduce 競合を取り除く方法は?

私は次の文法を持っています:

y.output ファイルで次の shift-reduce 競合が発生します。

これらの競合を取り除くための助けが必要です。ここで何が間違っていますか?優先ルールを設定しようとしましたが、どうにかここでは機能しないようです。何か案は?

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

bison - Bison: オプションのルールを扱う際の競合解決をシフト/削減

.y (yacc -- bison) ファイルの文法について、次のルールを定義しました。

C:E | D | ふ | あ

A:B | B '[' C ']' ;

(これは、オプションの [C] を持つ B のようなものです) 適切なレクサー ファイルを使用して適切な方法で .y ファイルをコンパイルすると、次の shift\reduce 競合が発生します。

状態 48
74 A: B .
75 | B. '[' C ']'
'[' シフトし、状態 91 に移動
'[' [reduce using rule 74 (A)]
$default reduce using rule 74 (A)

私の問題は、前任者 '[' がある場合は次のとおりです。縮小せずにシフトしたいのです。問題は、ドキュメントで何時間も検索しているときに、このエラーの解決策が見つからないことです。これを修正するにはどうすればよいですか (コード固有にしてください)。

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

grammar - yacc の shift/reduce エラー

文法のこの部分がエラーの原因であることはわかっていますが、それを修正する方法がわかりません。%left と right も使用していますが、役に立ちませんでした。この文法の何が問題なのか、誰か教えてください。よろしくお願いします。

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

bison - バイソンシフト/競合を減らす

Bison 入力ファイルでこの構文を記述しようとしています: https://courses.engr.illinois.edu/cs421/sp2011/mps/mp2/minijavasyntax.pdf

これは私の入力です:

コンパイル時に 2 つの 16 の競合が発生しました。競合の 1 つとして、Bison を --report=lookahead で実行しました。

OP_NOT Expression . [OP_OR, OP_AND, CMP_EQ, CMP_NEQ, CMP_GT, CMP_LT, CMP_GTE, CMP_LTE, OP_ADD, OP_MINUS, OP_MULT, OP_DIV, OP_MOD, ')', ';', ',', '[', ']']

SUBSCRIPT の優先順位は Operator ! よりも高くなければならないため、OP_NOT 先読みトークンに '[' が含まれていないことを期待しました。その他の競合はこのようなものです。どうすれば解決できますか。Tks

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

parsing - LALR 文法におけるシフト還元の競合を克服する方法

正と負の小数を解析しようとしています。

最初の 2 つのルールを含めるとシフト/リデュースの競合が発生しますが、競合が発生しないように文法を記述する方法がわかりません。私はレモンパーサーを使用しています。

編集: .out ファイルからの競合

編集 2: 問題を引き起こす最小限の文法

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

parsing - これは LALR(1) パーサーで解析できますか?

私は Bison で、とりわけ次の構造を持つ言語用のパーサーを作成しています。

  • 自己発送: [ identifier arguments]
  • 発送:【送料無料expressionidentifier arguments]
  • 文字列のスライス: expression[ expression, expression] - Python に似ています。

argumentsカンマで区切られた式のリストで、空にすることもできます。上記のすべては、それ自体でも式です。私の問題は、両方を解析する方法がわからないこと[method [other_method]][someString[idx1, idx2].toInt]、LALR(1) パーサーでこれを行うことができるかどうかです。

より正確には、次の例を見てみましょう: ( methodの結果で method を[a[b]]呼び出します)。状態になると。(先読みは 2 番目の です)、次のようなものが続く可能性があるため(これは既に に縮小されています) に縮小するか (それ自体が に縮小され、上から 2 番目の構造を継続する可能性があります)、それを保持するかはわかりません。(そしてそれをシフトします)のリストが続くからです(この場合のように)。ab[a[b]][aidentifierexpressiona[b,c]expressionidentifierarguments[b]

このシフト/リデュースの競合は、私がこの文法を表現した方法によるものですか、それとも LALR(1) パーサーでこれらの構造のすべてを解析することはできませんか?

そして、より一般的な質問として、言語が特定のタイプのパーサーによって解析可能である/不可能であることをどのように証明できますか?

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

parsing - バイソンシフト/シンプルな呼び出し式/ラムダ文法で競合を減らす

なぜそれが起こっているのか、そしてそれを解決する方法がわからないというシフト/リデュースの競合があります。

この文法を考えると:

このような式を解析できるようにしたい (網羅的ではない):

しかし、ここでシフト/削減の競合を受け取ります:

シフト/リデュースがいつ発生するかを理解していると思っていましたが、これは私を逃れているので、教育を受ける必要があります.

使用可能な優先順位ディレクティブについて詳しく調べてleft, right, precedence, nonassocみましたが、それらを使用してもあいまいさが解決されず、何か間違ったwarning: useless precedence and associativityことをしている. 答えが他の人にとって明らかであることを願っています。

最初はこれが Lambda で始まり CallExpressions で終わるという事実に関連していると思っていました()が、これらのトークンを競合しないように変更しても違いはありません。

/フェイスパーム