20
C ++は状況依存ですか、状況依存ですか?
C ++は状況依存言語であるという主張をよく耳にします。次の例を見てください。 a b(c); これは変数定義ですか、関数宣言ですか?それは記号の意味に依存しcます。場合cである変数は、その後、a b(c);名前の変数を定義bタイプのをa。で直接初期化されcます。しかし、cがタイプの場合、を取り、を返すa b(c);という名前の関数を宣言します。bca 文脈自由言語の定義を調べると、基本的に、すべての文法規則の左側には、1つの非終端記号だけが含まれている必要があることがわかります。一方、状況依存の文法では、左側に終端記号と非終端記号の任意の文字列を使用できます。 「C ++プログラミング言語」の付録Aを閲覧したところ、左側に単一の非終端記号以外に何もない単一の文法規則が見つかりませんでした。これは、C ++がコンテキストフリーであることを意味します。(もちろん、すべての文脈自由言語は、文脈自由言語が文脈依存言語のサブセットを形成するという意味で文脈依存でもありますが、それが目的ではありません。) では、C ++はコンテキストフリーですか、それともコンテキスト依存ですか?