我经常听到C ++是一种上下文敏感语言的说法。 以下面的例子: ab(c); 这是一个variables定义或函数声明? 这取决于符号c的含义。 如果c是variables ,则ab(c); 定义了一个types为b的variablesb 。 它直接用c初始化。 但如果c是一个types ,那么ab(c); 声明一个名为b的函数,它接受一个c并返回一个a 。 如果你查找上下文无关语言的定义,它将基本上告诉你,所有的语法规则都必须包含一个只包含一个非终结符号的左边。 另一方面,上下文敏感的语法允许在左侧的任意string的terminal和非terminal符号。 通过浏览“C ++编程语言”的附录A,我找不到一个单独的文法规则,除了左边的一个非terminal符号外,还有其他的东西。 这意味着C ++是上下文无关的。 (当然,上下文无关的语言也是上下文敏感的,上下文无关语言构成上下文敏感语言的一个子集,但这不是重点。) 那么,C ++是上下文无关的还是上下文敏感的?