C语言是。(盖特CS 2002) (A) 与上下文无关的语言 (B) 上下文敏感的语言 (C) 常规语言 (D) 只有图灵机器才能完全解析 答复: (B) 说明: C和C++是上下文相关语言。
null
有几个原因:
- 要解析C和C++,首先使用非常强大的 预处理器 这些预处理器不可避免地是手写的(它们不是基于正则表达式或上下文无关文法的理论基础)。
- 语法是模糊的:它有LR冲突,比如if-then-else冲突。解析器通常使用上下文(一个“else”匹配最接近的“if”)来解析这个问题。
- C和C++词汇表需要词汇反馈来区分TyBufff名称和标识符。也就是说,上下文敏感的lexer需要“上下文无关”解析器的帮助来区分标识符“foo”和typedef名称“foo”。在这个片段中,
int foo; typedef int foo; foo x;
第一个“foo”是标识符,第二个和第三个是typedef名称。您需要解析typedef声明来解决这个问题(由于类型有嵌套的括号,这肯定至少和解析上下文无关的语言一样困难)。 这意味着解析器和lexer是相互递归的,所以说解析器是上下文无关的,而lexer是上下文敏感的是没有意义的。
裁判: C和C++不是上下文无关的
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END