20
C ++是上下文无关的还是上下文相关的?
我经常听到有人声称C ++是上下文相关的语言。请看以下示例: a b(c); 这是变量定义还是函数声明?这取决于符号的含义c。如果c是变量,则a b(c);定义一个名为btype 的变量a。直接用初始化c。但如果c是类型,则a b(c);声明一个名为的函数b,该函数采用a c并返回a a。 如果您查看无上下文语言的定义,它将基本上告诉您所有语法规则的左手边必须仅由一个非终结符组成。另一方面,上下文相关的语法允许在左侧使用任意字符串的终止符和非终止符。 浏览“ C ++编程语言”的附录A,我找不到一个单独的语法规则,该规则除左侧有一个非终结符外还没有其他内容。这意味着C ++是无上下文的。(当然,每种上下文无关的语言也是上下文敏感的,因为上下文无关的语言构成了上下文敏感语言的子集,但这并不是重点。) 那么,C ++是上下文无关的还是上下文相关的?