现代编程语言的语法是无上下文还是上下文敏感?

时间:2012-03-11 04:24:49

标签: parsing programming-languages grammar theory

C ++,C#或Java语言是无上下文还是上下文敏感?

1 个答案:

答案 0 :(得分:6)

C ++既不是无上下文也不是上下文敏感的,因为template system is Turing-complete并确定一段C ++代码是否合法C ++是不可判的。例如,我可以定义一个模拟字符串上模拟TM的模板类,然后创建一个值为1的常量(如果机器接受),如果不接受,则创建0。如果我这样做,那么如果TM在给定输入上暂停,则以下代码将是合法的:

int myArray[TMTemplate</* ... args ... */>::value];

由于TM拒绝,因此会创建一个大小为0的数组,这是不允许的。

C#和Java都不是无上下文的,因为检查变量是否在整个特定范围内正确且一致地使用是众所周知的(证明是复杂的并且依赖于Ogden's lemma)。但是,我不确定它们是否与上下文相关。

希望这能为你的问题提供部分答案!