Is C++ context-free or context-sensitive?

Ich höre oft Behauptungen, dass C ++ eine kontextsensitive Sprache ist. Nehmen Sie das folgende Beispiel:

a b(c);

Ist das eine Variablendefinition oder eine Funktionsdeklaration? Das hängt von der Bedeutung des Symbols abc. Obc ist einVariable, danna b(c); definiert eine Variable mit dem Namenb vom Typa. Es wird direkt mit initialisiertc. Aber fallsc ist einArt, danna b(c); deklariert eine Funktion namensb das braucht einec und gibt ein zurücka.

Wenn Sie die Definition von kontextfreien Sprachen nachschlagen, wird Ihnen im Grunde gesagt, dass alle Grammatikregeln linke Seiten haben müssen, die aus genau einem nicht-terminalen Symbol bestehen. Kontextsensitive Grammatiken erlauben hingegen beliebige Folgen von terminalen und nicht terminalen Symbolen auf der linken Seite.

Beim Durchsuchen von Anhang A von "Die C ++ - Programmiersprache" konnte ich keine einzige Grammatikregel finden, die auf der linken Seite außer einem einzigen nicht-terminalen Symbol noch etwas anderes enthielt. Das würde bedeuten, dass C ++ kontextfrei ist. (Natürlich ist jede kontextfreie Sprache auch in dem Sinne kontextsensitiv, dass die kontextfreien Sprachen eine Teilmenge der kontextsensitiven Sprachen bilden, aber das ist nicht der Punkt.)

Ist C ++ also kontextfrei oder kontextsensitiv?

Antworten auf die Frage(19)

Ihre Antwort auf die Frage