1

在编译器的词法分析阶段,如果遇到错误的标记,词法分析器将进入错误恢复模式,假设它放弃标记,直到看到下一个分号并再次开始分析。那么生成的整个令牌传递给解析器?如果词法分析器可以将不良标记传递给解析器?

我的意思是说,如果词法分析器遇到错误,那么编译停止在这一点,或者它继续并进入解析阶段?

+1

这取决于你所使用的解析器/词法和配置。是否有你想知道的具体解析器/词法分析器组合? – CoronA

回答

1

期间,如果不好的令牌遇到那么词法分析器将进入故障恢复模式,假设说编译器的词法分析阶段,它丢弃,直到下一个分号看到令牌并重新开始对其进行分析。

这只是一种方式,而不是最好的。

然后生成的整体令牌传递给解析器?

不,只有下一个合法的令牌。

我的意思是说,如果词法分析器遇到错误,那么编译在这一点停止,否则它会继续并进入解析阶段?

它继续。

但几十年来,我一直在练习相反。而不是让词法分析器尝试自己的错误恢复,我只是将违规的字符返回给解析器。由于解析器通常具有更好的错误恢复能力,因此会导致更多的容错解析。

样品法/柔性实现:

. return yytext[0]; 
+0

其他语言如何做到这一点。你也可以告诉我,在编译期间我们看到的错误是他们在编译的每个阶段中检测到的错误的错误混合,还是只是编译阶段的错误? – user1313623

+0

它与语言无关。它是词法分析器/解析器对的一个属性。我也不明白你的新问题。 – EJP

+0

好吧,我从你的回答中得到了我想问的问题。忽略我的新问题。你的回答清除了我的怀疑。非常感谢 – user1313623

相关问题