LR(1) 解析が C では不足する理由
多くのプログラミング言語は LR パーサーのバリエーションを使用して分析できますが、C では注目すべき例外。これは、C ではあいまいな文法規則が許可されており、LR(1) パーサーはこれを処理できるように設計されているためです。
次の C ステートメントを考えてみましょう:
x * y ;
このステートメントには 2 つの異なる解析を含めることができます。
LR(1) パーサーは、1 つのトークンの先読みのみに基づいてこれら 2 つの解釈を区別できません。このあいまいさは、C では式を宣言とステートメントの両方として使用できるという事実から生じています。
このあいまいさに対応するために、C パーサーは通常、シンボル テーブル情報と組み合わせた決定論的な解析手法に頼ります。 x の型をチェックすることで、パーサーはステートメントが宣言であるか乗算であるかを判断できます。
代わりに、GLR パーサー (一般化 LR パーサー) は、両方の解析を受け入れてそれらを表現することで C の曖昧さを処理できます。グラフ構造。後続のパスでは、未解決のあいまいさを解決できます。
結論として、C には、LR(1) パーサーが効果的に処理できないあいまいな文法規則に対応できる解析手法が必要です。
以上がなぜ LR(1) パーサーは C のあいまいな文法を処理できないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。