コンテキストフリー言語とコンテキスト依存言語の区別は、C のコンテキストで議論されてきました。文脈自由言語は、左側が単一の非終端記号のみで構成される文法規則によって特徴付けられます。一方、文脈依存言語では、左側で端末と非端末を任意に組み合わせることができます。
文脈自由の仮定の払拭
C はコンテキストフリー言語の制約に従っているように見えますが、詳しく調べるとそうではないことがわかります。 C 内にテンプレートのインスタンス化が存在するため、問題が複雑になります。テンプレートのインスタンス化に含まれる計算により、セマンティクスに基づいてプログラムの構文を導出できます。これにより、チューリング完全要素が導入され、 C の文法が本質的に制限されなくなり、文脈自由言語と文脈依存言語の両方の領域を超えたものになります。
C のあいまいさ
一般に信じられていることに反して、C 構文のあいまいさは決定的な特徴ではありません。最終的に、識別子の構文カテゴリはその宣言によって決定されるため、プログラム内で同一の文字列を識別する機能に依存することになります。この機能は、コンテキストフリー文法またはコンテキスト依存文法内にカプセル化することはできません。
C 解析の実際的な意味
C 構文の複雑さは、C 構文の複雑さに重大な影響を及ぼします。解析中。 C を解析できる文脈依存文法を書こうとすることは事実上不可能です。このタスクを処理するチューリング マシンを作成するだけでも、克服できない課題となるでしょう。これは、C 標準が完全な形式文法の提供を避ける理由を説明しています。
要約: C の複雑な文法
結論として、C の文法はどちらにも厳密には準拠していません。コンテキストフリーまたはコンテキスト依存の分類。テンプレートのインスタンス化によりチューリング完全性が導入され、その文法がこれらの境界を超えて拡張されます。その結果、C の解析は複雑で困難な作業のままです。
以上がC は本当にコンテキストフリーですか? その複雑な文法と解析の課題を見てみるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。