C语言是:
(A)上下文无关语言
(B)上下文敏感的语言
(C)常规语言
(D)仅由图灵机完全Parasble答案:(乙)
说明: C 和 C++ 是上下文相关的语言。
有几个原因:
- 要解析 C 和 C++,首先要使用非常强大的预处理器。这些预处理器不可避免地是手工编写的(它们不是基于正则表达式或上下文无关语法等理论基础)。
- 语法不明确:它有 LR 冲突,例如 if-then-else 冲突。解析器通常使用上下文来解决这个问题(“else”匹配最接近的“if”)。
- C 和 C++ 词法分析器需要词法反馈来区分 typedef 名称和标识符。也就是说,上下文敏感词法分析器需要“上下文无关”解析器的帮助来区分标识符“foo”和类型定义名称“foo”。在这个片段中,
int foo; typedef int foo; foo x;
第一个“foo”是一个标识符,而第二个和第三个是 typedef 名称。您需要解析 typedef 声明来解决这个问题(并且由于类型具有嵌套括号,这绝对至少与解析上下文无关语言一样困难)。
这意味着解析器和词法分析器是相互递归的,所以说解析器是上下文无关的而词法分析器是上下文敏感的是没有意义的。
参考:C 和 C++ 不是上下文无关的
这个问题的测验