【问题标题】:Wrong keyword is detected in during lexical analysis or parsing?在词法分析或解析期间检测到错误的关键字?
【发布时间】:2013-12-04 18:04:00
【问题描述】:

出于兴趣,我正在编写一个小型编译器,我需要知道在词法分析或解析期间检测到错误关键字的哪个阶段(不在语言中的关键字)?

【问题讨论】:

    标签: parsing syntax compiler-construction lexical-analysis


    【解决方案1】:

    您将在解析过程中检测到这一点。不是你有一个“错误的关键字”,而是你有一个标识符(即变量名)出现在你不期望的地方。因此,如果您的源代码如下所示:

    reeeturn 3;
    

    从编译器的角度来看,您只是在使用一些名为reeeturn 的变量。这可能是一个错误,因为未定义具有该名称的变量。或者,在这种情况下,标识符后面有数字可能是语法错误。

    但这里没有词法错误。这是一个完全有效的标记序列:标识符、数字、分号。

    【讨论】:

      【解决方案2】:

      这可能是在词法分析期间。词法分析是编译器阶段,其中输入文件被分割成片段并用这些片段的含义进行标记,而解析则获取这些现有片段并使用它们来组装 AST。在没有看到代码的情况下,我无法确定这一点,但基于这个推理,我怀疑错误出在扫描仪而不是解析器中。

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        这取决于语言。

        词法分析阶段负责从源文件创建令牌流。如果“错误的关键字”在语言中仍然是有效的标记,它将被正确地标记 - 例如,在 C 中,“错误的关键字”将被标记为标识符。只有在解析的后期才会显示错误。

        另一方面,在“错误关键字”不能是任何其他有效标记的语言中(例如,使用sigils 表示变量的语言),词法分析器本身会抱怨。

        【讨论】:

          猜你喜欢
          • 2015-03-04
          • 1970-01-01
          • 2012-06-13
          • 2012-03-04
          • 2014-08-13
          • 1970-01-01
          • 1970-01-01
          • 2020-01-22
          • 1970-01-01
          相关资源
          最近更新 更多