問題タブ [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.
yacc - yacc 文法で shift-reduce 競合を取り除く方法は?
私は次の文法を持っています:
y.output ファイルで次の shift-reduce 競合が発生します。
これらの競合を取り除くための助けが必要です。ここで何が間違っていますか?優先ルールを設定しようとしましたが、どうにかここでは機能しないようです。何か案は?
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)
私の問題は、前任者 '[' がある場合は次のとおりです。縮小せずにシフトしたいのです。問題は、ドキュメントで何時間も検索しているときに、このエラーの解決策が見つからないことです。これを修正するにはどうすればよいですか (コード固有にしてください)。
grammar - yacc の shift/reduce エラー
文法のこの部分がエラーの原因であることはわかっていますが、それを修正する方法がわかりません。%left と right も使用していますが、役に立ちませんでした。この文法の何が問題なのか、誰か教えてください。よろしくお願いします。
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
parsing - LALR 文法におけるシフト還元の競合を克服する方法
正と負の小数を解析しようとしています。
最初の 2 つのルールを含めるとシフト/リデュースの競合が発生しますが、競合が発生しないように文法を記述する方法がわかりません。私はレモンパーサーを使用しています。
編集: .out ファイルからの競合
編集 2: 問題を引き起こす最小限の文法
parsing - これは LALR(1) パーサーで解析できますか?
私は Bison で、とりわけ次の構造を持つ言語用のパーサーを作成しています。
- 自己発送: [
identifier
arguments
] - 発送:【送料無料
expression
】identifier
arguments
] - 文字列のスライス:
expression
[expression
,expression
] - Python に似ています。
arguments
カンマで区切られた式のリストで、空にすることもできます。上記のすべては、それ自体でも式です。私の問題は、両方を解析する方法がわからないこと[method [other_method]]
と[someString[idx1, idx2].toInt]
、LALR(1) パーサーでこれを行うことができるかどうかです。
より正確には、次の例を見てみましょう: ( methodの結果で method を[a[b]]
呼び出します)。状態になると。(先読みは 2 番目の です)、次のようなものが続く可能性があるため(これは既に に縮小されています) に縮小するか (それ自体が に縮小され、上から 2 番目の構造を継続する可能性があります)、それを保持するかはわかりません。(そしてそれをシフトします)のリストが続くからです(この場合のように)。a
b
[a
[b]]
[
a
identifier
expression
a[b,c]
expression
identifier
arguments
[b]
このシフト/リデュースの競合は、私がこの文法を表現した方法によるものですか、それとも LALR(1) パーサーでこれらの構造のすべてを解析することはできませんか?
そして、より一般的な質問として、言語が特定のタイプのパーサーによって解析可能である/不可能であることをどのように証明できますか?
parsing - バイソンシフト/シンプルな呼び出し式/ラムダ文法で競合を減らす
なぜそれが起こっているのか、そしてそれを解決する方法がわからないというシフト/リデュースの競合があります。
この文法を考えると:
このような式を解析できるようにしたい (網羅的ではない):
しかし、ここでシフト/削減の競合を受け取ります:
シフト/リデュースがいつ発生するかを理解していると思っていましたが、これは私を逃れているので、教育を受ける必要があります.
使用可能な優先順位ディレクティブについて詳しく調べてleft, right, precedence, nonassoc
みましたが、それらを使用してもあいまいさが解決されず、何か間違ったwarning: useless precedence and associativity
ことをしている. 答えが他の人にとって明らかであることを願っています。
最初はこれが Lambda で始まり CallExpressions で終わるという事実に関連していると思っていました()
が、これらのトークンを競合しないように変更しても違いはありません。
/フェイスパーム