問題タブ [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.
grammar - シフトまたはリデュースを強制するシフト/リデュースの競合を解決する方法は?
Yacc/Bison でシフト/リデュースの競合が発生した場合、その競合を希望どおりに解決することは可能ですか? 言い換えれば、シフトまたはリデュースを優先するように明示的に強制することは可能ですか?
私が読んだことについては、デフォルトの解像度に満足している場合は、ジェネレーターに文句を言わないように伝えることができます。あなたの合理的な選択を曖昧にするので、私はこれが本当に好きではありません.
別のオプションは、文法を書き直して問題を修正することです。これが常に可能かどうかはわかりませんが、多くの場合、これにより理解がはるかに難しくなります。
最後に、これを修正できる優先ルールを読みました。私は無知にそれを多くの方法で試しましたが、うまくいきませんでした。そのために優先ルールを使用することは可能ですか? どのように?
私のあいまいな文法は非常に異なっていますが、Bison マニュアルの古典的な if-then-else を使用して具体的な例を示すことができます。
parsing - パーサーの問題、パラメーターの終わりの検索、シフト/リデュースの競合の発生
コンマがないことを認識して特定のパラメーターの終わりを見つけるようにパーサーを設定しようとしているので、基本的にはこのようなパラメーターを見つけるように設定しています
パラメータ: end_parameter コンマ
(このデータ型は単なるリストなので、終了を示すものは何もありません。項目を区切るコンマがない場合に終了するだけです)
そして、 end_parameter は以下で定義されており、想定されていることを行います。パーサーは、右中かっこを末尾として認識して他のデータ型を処理しますが、コンマの欠落で終了する型を設定すると、シフト/削減エラーが発生します。誰か提案はありますか?
parsing - バイソンレポートシフトは競合を減らしますが、どうすればそれらを見つけることができますか?
私はOOP言語のほとんどの機能を備えたbisonパーサーに取り組んでいますが、bisonはシフト/リデュースの競合があると文句を言います。私が得た:
問題は、それらがどこにあるかを教えてくれないことです。誰かがそこに衝突を見つける方法を知っていますか?
前もって感謝します。
bison - Shift/Reduceの競合を解決する文法仕様
私はJison(Bison)を使用して単純なマークアップ言語を作成しています。私は明らかにこれに慣れていませんが、わずかなバリエーションが非常にうまく機能しています。S/Rの競合の原因がわかりません。
'Text'が2つのレクサーアクション(開始条件が異なる)によって返されることは問題ではないようです。文法のルールが少なくなり、ユーザーへのエラーメッセージが一貫しているため、これが気に入っています。コンテキストに関係なく「テキスト」ルールを共通にすることを試みました。また、各トークンに異なる名前を付けることも試みましたが、すべてが一緒になっている場合、S/R競合には影響がないようです。
パーサーは、プレーンテキスト、サブ配列、およびさまざまな特殊ノードを含むjsonオブジェクトを作成することを目的としています。
仕様:
警告:
ジェネレータアルゴリズムが異なれば、多かれ少なかれ問題がありますが、すべて問題があるようです。
ありがとう!
bison - バイソンシフト-競合を減らす-解決できません
文法は次のとおりです。
bison -d-vxyz.lを介して発生するシフト削減の競合は状態97にあります
しかし、私はこの対立を解決する方法を知りません。答えを待っています。
bison - シフトを削除するために文法を改革することで、if-then-elseの競合を減らす
指定された文法のバイソンのshift-reduce競合を削除するにはどうすればよいですか?
修正された文法を与える解決策をいただければ幸いです。
compiler-construction - YACCでのシフト削減の競合
次のyaccコードを試していますが、shift/reduceエラーが発生しています。私はこれにかなり新しいです
The Purpose of the code is to prepare the syntax for if - else with logical operators also incorporated
この対応するyaccコードのLexプログラムは次のとおりです。
%%
grammar - Bison シフト削減コンフリクト
競合のある文法の簡素化されたバージョン:
問題は、変数と関数の両方が TYPE と IDENTIFIER で始まることです。
この言語では、変数は常に関数の前に宣言されますが、解析を試みると、常に
解析エラー: 構文エラー、予期しない '('、',' または ';' が必要 [foo の後]
variable_list をあまり欲張らないようにする方法、または次のトークンが ';' または ',' ではなく '(' である場合、それは明らかに関数であって変数宣言ではないことをパーサーに認識させるにはどうすればよいでしょうか?
競合の bison デバッグ出力は次のとおりです。
reduce を優先するようにあらゆる種類の %prec ステートメントを試しましたが (この場合の違いはわかりませんが)、bison を reduce を使用してこれを解決することに成功しませんでした。また、ルールをシャッフルしてみました。 non_empty_var_list のような新しいルールを作成し、本体を function_list に分割することについて | non_empty_var_list function_list であり、どの試みもこの問題を解決しません。私はこれが初めてで、これを修正する方法のアイデアがなくなったので、完全に困惑しています。
parsing - 後置/中置演算子との優先順位の競合
これがレモンパーサージェネレーター用に書かれた文法です:
コンパイルしようとすると、ジェネレーターは次の競合を生成します。
PreIncrementationとPostDecrementationの両方の優先順位と結合性が文法で明示的に指定されているのに、なぜ競合があるのですか?
datetime - YACC シフトを使用した日時パーサーは競合を減らします
私は次のYACCパーサーを持っています
%%
3つのシフト削減の競合を与えています.どうすればそれらを削除できますか????