非 LR(0) 削減状態がどこから来るのかわかりません。それは次のことを意味しますか?
- LR(0) 還元状態を削除し、LR'(0) 状態を取得します
- LR'(0) states を使用して LR(K) states を生成します。非 LR(0) 還元状態は LR(K) 状態から来ます。
これは、Authomatic Error Recovery を使用して効率的な LALR(K) Parders を構築するためのパティカル メソッドのコピーです。
4.2章をお読みください
非 LR(0) 削減状態がどこから来るのかわかりません。それは次のことを意味しますか?
これは、Authomatic Error Recovery を使用して効率的な LALR(K) Parders を構築するためのパティカル メソッドのコピーです。
4.2章をお読みください
リデュース状態とは、リダクションが可能な状態である。つまり、状態の項目セットに最終項目が含まれている場合、その状態は縮小状態です。
reduce 状態が LR(0) の場合 (状態のアクションを先読みなしで識別できることを意味します)、状態のアイテムセットは単一のアイテムのみである必要があり、これは最終的なものでなければなりません。(そうでない場合、状態が LR(0) になることはありません。これは、使用可能なアクションが複数あり、先読みによってのみ区別できるためです。)
彼が指摘するように、LR(0) の削減アクションは正しいに違いありません。なぜなら、その状態では他のアクションは実行できなかったからです。そのため、先読みトークンがエラー回復を必要とするエラーを生成したとしても、削減を元に戻す必要はありません。そのため、著者は LR(0) 還元状態を削除することを提案しています。
もちろん、すべての状態が LR(0) であるわけではありません。ほとんどの州では、実行されるアクションは先読みに依存します。特に、非 LR(0) 削減状態では、削減は先読みトークンに依存します。また、LR(0) の削減状態が削除された後、残りのすべての削減状態は非 LR(0) になります。
しかし、テーブルの圧縮はエラー アクションをデフォルトの削減に置き換える可能性があるため (そして、LALR 状態のマージのため、この章が LALR に関するものではない可能性があると思います)、先読みトークンに対して示された削減が行われる可能性は十分にあります。実際には間違っていることがわかります。その場合、エラーから回復するために削減を元に戻す必要がある場合があります。
著者の仮定では、リダクションを元に戻すことは一般的に不可能であり、したがってパーサーは、リダクションが確実に有効であることが判明するまでリダクション アクション (スタックの変更を含む) を延期する必要があると思われます。シフトを実行します。この章の残りの部分は、この目標の達成に関するものです。