[解決済み] シフトとリデュースの競合を解決するには?
2022-02-12 23:27:06
質問内容
論文に必要なパーサーを作るためにCUPを使っています。私の文法には、シフト/リデュースの競合があります。私はこの生産ルールを持っています。
command ::= IDENTIFIER | IDENTIFIER LPAREN parlist RPAREN;
という警告が表示されます。
Warning : *** Shift/Reduce conflict found in state #3
between command ::= IDENTIFIER (*)
and command ::= IDENTIFIER (*) LPAREN parlist RPAREN
under symbol LPAREN
今、本当はずれて欲しかったので、かなり大丈夫なのですが、教授から「矛盾を解決する方法を見つけなさい」と言われました。私は盲目です。いつもif/elseのコンフリクトについて読んでいますが、私にはこれが該当しないように思えます。 あなたは私を助けることができますか?
追伸:IDENTIFIER, LPAREN "(" と RPAREN ")" はターミナルで、parlist と command はターミナルではありません。
解決方法は?
あなたの問題は、これらのルールの中に全くないのです。Michael Mrozek氏の回答は、quot;dangling else問題を解決するための正しいアプローチですが、目下の問題を把握できてはいません。
エラーメッセージを見ると、shift / reduceの競合があることがわかります。 LPARENのレキシング時 . このルールだけでは、コンフリクトは発生しないと確信しています。
文法が見えないので、どうしようもないのですが。しかし、あなたのコンフリクトは、おそらく
command
で始まる別のルールが続きます。
LPAREN
.
の後にある可能性のある他の規則を調べます。
command
で始まり
LPAREN
. その後、ルールを固めることになります。特定の入力に対して文法が誤っている可能性が非常に高いのです。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン