如果词法分析器可以将坏令牌传递给解析器?

时间:2016-02-29 06:52:26

标签: parsing compiler-errors compiler-construction lexical-analysis lexical

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

我的意思是说,如果词法分析器遇到错误,那么编译会在此时停止,还是会继续并进入解析阶段?

1 个答案:

答案 0 :(得分:1)

  

在编译器的词法分析阶段,如果遇到错误令牌,那么词法分析器将进入错误恢复模式,并且假设它丢弃令牌直到看到下一个分号并再次开始分析。

这只是一种做法,而不是最好的。

  

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

不,只有下一个合法代币。

  

我的意思是说,如果词法分析器遇到错误,那么编译会在此时停止,还是会继续并进入解析阶段?

它继续。

但是几十年来我一直在练习相反的事情。而不是让词法分析器尝试进行自己的错误恢复,而只是将有问题的字符返回给解析器。由于解析器通常具有更好的错误恢复能力,因此可以实现更加容错的解析。

示例 lex / flex 实施:

. return yytext[0];