問題タブ [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 - バイソン文法でぶら下がっている他の人
次の文法は、 http://marvin.cs.uidaho.edu/~heckendo/CS445/danglingElse.htmlを読んだ後で解決しようとしましたが、他の問題がぶら下がっています。私は間違ったことをしました...
スクリプトの最後にifステートメントコードを配置しました。
お時間をいただきありがとうございます。
bison - Bison shift/reduce conflict in A ::= AA ルール
次の bison 文法ファイルを作成しました。
bison
に関する shift/reduce 競合を報告するようになりましexpr : expr expr
た。問題を次の最小セットに抽出しました。
bison
シフト/リデュースの競合についてまだ不平を言っている理由がわかりません。古いメール アーカイブを見つけました: Re: bison/yacc: shift/reduce conflict using %prec for compositionですが、作者の説明もわかりません。
この文法があいまいである理由と、競合を解決する方法を誰かが明確にすることはできますか?
編集:NUMBER NUMBER
つまりNUMBER * NUMBER
、この 2 つの数値の積です。
grammar - この単純な文法にシフト/リデュースの競合があるのはなぜですか?
これは機能します:
これには 2 つの SHIFT/REDUCE 競合があります。
なぜ?
bison - Shift-単純な(?)文法での競合を減らす
バイソンで文法を説明しようとしていますが、それができるかどうかわかりません。私の意図する文法はこれです:
" "は、トークンで区切られたitems
(空の可能性がある)要素のシーケンスです。item
SEP
各アイテムは、最大4つのトークン(A B C D
)で構成され、この順序で。で区切られSEP
ます。アイテム内のA
、、、C
およびD
トークンはオプションです。
各アイテム内、およびアイテム自体の間で同じセパレータトークンSEPが再利用されていることに注意してください。
意図した文法が明確であることを願っています。明確だと思いますが、バイソンで解析できるように十分に制限されているかどうかはよくわかりません。残念ながら、パーサーの知識はかなり錆びています。
与えられた文法を使用して、bisonは4つのshift/reduceの競合を報告します。「出力」を見ると、それらがどこで発生し、その理由がわかります。しかし、S / Rの競合を取り除くために、意図した文法をどのように(そしてもし)書くことができるのか、私は途方に暮れています。
私は%expect
宣言を使いたくありません。同様に、スキャナーにセパレータートークンを渡してもらうのではなく、セパレータートークンを消費させたくありません。
この文法をサニタイズする方法についてのヒントをいただければ幸いです。
yacc - byacc シフト/リデュース
これとシフト削減の問題を理解するのに苦労しています。
';' の追加 言語を変更できないため、最後まで問題を解決できません。次の例のようにする必要があります。先行オペランドは機能しますか?
例は次のとおりです。
変数は次のように宣言できます: ポインターとして、または整数として int として、したがって、これは両方とも有効です:
コードは次のとおりです。
それは明らかに式の後にシフト/リデュースの問題を引き起こします。「less」演算子のexprにシフトするか、別の変数宣言にreduceできるためです。
変数宣言に優先順位を付けたいのですが、%nonassoc prec_aux を作成して '<' type '>' %prec prec_aux と type tNAME の後に配置しようとしましたが、問題は解決しません:S
どうすればこれを解決できますか?
出力は次のとおりです。
返信時に改行とコードを投稿する方法を理解することはできません...だから、ここに出力があります:
それが出力であり、エラーは私が言及したもののようです。
実際にはオプションではない言語に新しい端末を追加する以外に、別の解決策を知っている人はいますか?
解決策は、文法を書き直して、何らかの方法で先読みして、「<」の後の型または式であるかどうかを確認できるようにすることだと思いますが、方法がわかりません。
同じキャラクターなので、優先順位が機能する可能性は低いです。定義した型を優先する方法はありますか? 宣言など?
前もって感謝します
haskell - Happyでのシフト/競合の削減
if-then[-else] ケースを解析するための正しいルールを作成するにはどうすればよいですか? ここにいくつかの文法があります:
この文法は、次の式を正しく解析します。
ただし、コンパイルすると、シフト/削減の競合に関する警告が発生します。幸福へのドキュメントには、そのような競合の例が含まれています: http://www.haskell.org/happy/doc/html/sec-conflict-tips.html
示されている解決策は 2 つあります。1 つ目は、再帰型を変更することです (この場合の方法は明確ではありません)。2 つ目は、何も変えないことです。このオプションは私には問題ありませんが、相談が必要です。
grammar - 単項マイナスに Bison で優先順位を使用しても、シフト/削減の競合が解決されない
私は単項マイナスオペランドを使用する非常に単純な文法を考案しています。ただし、シフト/削減の競合が発生します。Bison のマニュアルや他のどこを見ても、新しいトークンを定義し、バイナリ マイナス オペランドよりも優先順位を高くしてから、ルールで「%prec TOKEN」を使用する必要があると書かれています。
私はそれをしましたが、それでも警告が表示されます。なんで?
私は bison (GNU Bison) 2.4.1 を使用しています。文法を以下に示します。
conflict - yacc シフト/競合の削減
yacc のコンパイル中に競合の問題に直面しました。
以下のエラー メッセージ:
以下のコード:
この時点で、'shift/reduce' 競合が発生します。
何が問題なのかわからない。この競合を解決するにはどうすればよいですか?
ありがとう。
conflict - yacc シフト/競合の削減。それは本当に深刻な複雑さです
私はこの対立を解決するために何度も試みました。
しかし、なぜここで競合が発生するのかわかりません。
コンパイル時に 2 つの競合が発生します。
yacc(bison) エラーは次のようになります。
yacc ソースは次のようになります。
上記の2つの問題があります。どうしたの?
parsing - 式呼び出しとの Shift/Reduce 競合
この単純なパーサーを Lemon を使用してコンパイルしようとすると、競合が発生しますが、どのルールが間違っているのかわかりません。binaryexpression または callexpression を削除すると、競合がなくなります。
[編集] LParenthesis に左側の結合性を追加すると、競合が解決されました。ただし、それが正しいことかどうかは知りたいです。一部の文法 (fe C++) では、構築演算子 '()' と呼び出し演算子 '()' の優先順位が異なることがわかりました。だから私は正しいことについて確信が持てません。