我正在为感兴趣编写一个小编译器,我需要知道在词法分析或解析过程中检测到错误关键字中的哪个阶段(一个不在语言中的关键字)?
答案 0 :(得分:1)
这可能是在词法分析期间。词法分析是编译阶段,其中输入文件被分割成片段并用这些片段的含义标记,而解析则获取那些现有片段并使用它们来组装AST。没有看到代码,我无法确定这一点,但基于这种推理,我怀疑错误是在扫描仪而不是解析器。
希望这有帮助!
答案 1 :(得分:1)
您将在解析过程中检测到这一点。并不是说你有一个“错误的关键字”,而是你有一个标识符(即一个变量名)出现在你不期望的地方。因此,如果您的源代码如下:
reeeturn 3;
从编译器的角度来看,您只是使用了一个名为reeeturn
的变量。这可能是一个错误,因为没有定义具有该名称的变量。或者,在这种情况下,使用标识符后面的数字可能是语法错误。
但这里没有 lexical 错误。这是一个完全有效的令牌序列:标识符,数字,分号。
答案 2 :(得分:1)
这取决于语言。
lexing阶段负责从源文件创建令牌流。如果“错误关键字”仍然是该语言中的有效标记,则它将被正确标记化 - 例如,在C中,“错误关键字”将被标记化为标识符。只有在解析过程中才会发现错误。
另一方面,在一种语言中,“错误的关键字”不能是任何其他有效的标记(例如,对变量使用sigils的语言),词法分析器本身会抱怨。