主に解析の詳細に関連する、LALR(1) パーサーの競合に関するいくつかの質問:
教科書に記載されているさまざまな LALR(1) パーサーによると、シフト/リデュースの競合が発生した場合、そもそも文法が LALR(1) ではないという兆候ですよね?
LR(1) から LALR(1) への状態のマージが行われるため、有効なLALR(1) 文法でReduce/Reduce の競合が発生する可能性がありますよね?
YACC と GNU Bison で使用されている優先順位と結合性は、シフト/競合の削減を支援するために導入されたツールですよね?
さらに、競合するシフト/リデュース ルールの優先順位が先読みシンボルの優先順位と等しい場合にのみ、パーサーが結合性をチェックする必要があります。それ以外の場合、結合性は無関係ですよね?
私は 100% 確信が持てないので質問しています。本は競合解決についてあまり詳しく説明していません。この件に関して私が見つけた数行は GNU Bison マニュアルにあるだけです。
上記の Bison マニュアル リンクに関する質問:
- 競合ルールや先読みトークンに優先順位がなければ、選択肢は SHIFT だと主張するのはなぜですか? リダクション ルールに優先順位がある場合、優先順位がまったくない先読みよりも優先されると思います。