【发布时间】:2012-03-27 23:43:51
【问题描述】:
C++、C# 或 Java 语言是上下文无关的还是上下文敏感的?
【问题讨论】:
标签: parsing programming-languages grammar theory
C++、C# 或 Java 语言是上下文无关的还是上下文敏感的?
【问题讨论】:
标签: parsing programming-languages grammar theory
C++ 既不是上下文无关的,也不是上下文敏感的,因为template system is Turing-complete 和确定一段 C++ 代码是否合法 C++ 非常困难。例如,我可以定义一个模板类,它在字符串上模拟 TM,然后创建一个常量,如果机器接受,则值为 1,如果不接受,则为 0。如果我这样做了,那么如果 TM 在给定的输入上停止,则以下代码将是合法的:
int myArray[TMTemplate</* ... args ... */>::value];
因为如果 TM 拒绝,这会创建一个大小为 0 的数组,这是不允许的。
C# 和 Java 都不是上下文无关的,因为检查变量是否在特定范围内正确且一致地使用已知不是上下文无关的(证明很复杂,依赖于 Ogden's lemma)。但是,我不确定它们是否与上下文相关。
希望这可以部分回答您的问题!
【讨论】: