Parsing 在词法分析或解析期间在中检测到错误的关键字?

Parsing 在词法分析或解析期间在中检测到错误的关键字?,parsing,syntax,compiler-construction,lexical-analysis,Parsing,Syntax,Compiler Construction,Lexical Analysis,出于兴趣,我正在编写一个小型编译器,我需要知道在词法分析或解析过程中检测到错误关键字(不在语言中的关键字)的哪个阶段?这可能是在词法分析过程中。词法分析是编译器的一个阶段,在这个阶段,输入文件被分割成多个部分,并用这些部分的含义进行标记,而解析则使用这些现有部分来组装AST。在没有看到代码的情况下,我无法确定这一点,但基于这种推理,我怀疑错误在扫描仪中,而不是解析器中 希望这有帮助 您将在解析过程中检测到这一点。这并不是你有一个“错误的关键字”,而是你有一个标识符(即变量名)出现在你不期望的地方

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

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


希望这有帮助

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

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


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

这取决于语言

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

另一方面,在“错误的关键字”不能是任何其他有效标记的语言中(例如,用于变量的语言),lexer本身会抱怨