📜  C |杂项|问题2

📅  最后修改于: 2021-05-25 22:52:49             🧑  作者: Mango

C语言是。 (GATE CS 2002)
(A)上下文无关的语言
(B)上下文相关的语言
(C)普通语言
(D)仅可由图灵机完全解析答案: (B)
说明: C和C++是上下文相关的语言。

有以下几个原因:

  1. 要解析C和C++,首先要使用功能非常强大的预处理器。这些预处理器不可避免地是手工编写的(它们不基于诸如正则表达式或上下文无关文法之类的理论基础)。
  2. 语法是模棱两可的:它具有LR冲突,例如if-then-else冲突。解析器通常使用上下文来解决此问题(“ else”与最接近的“ if”匹配)。
  3. C和C++词法分析器需要词法反馈,以区分typedef名称和标识符。也就是说,上下文敏感的词法分析器需要“无上下文”解析器的帮助,以区分标识符“ foo”和类型定义名称“ foo”。在这个片段中
    int foo;
    typedef int foo;
    foo x;

    第一个“ foo”是标识符,第二个和第三个是typedef名称。您需要解析typedef声明以解决此问题(并且由于类型具有嵌套的括号,因此,这至少与解析上下文无关的语言一样困难)。
    这意味着解析器和词法分析器是相互递归的,因此说语法分析器是上下文无关的而没有理由说解析器是上下文无关的。

参考:C和C++并非上下文无关

这个问题的测验

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。