在编译器的词法分析阶段,如果遇到错误的令牌,那么词法分析器将进入错误恢复模式,并且假设它丢弃令牌直到看到下一个分号并再次开始分析。然后生成的整个标记被传递给解析器?。
我的意思是说,如果词法分析器遇到错误,那么编译会在此时停止,还是会继续并进入解析阶段?
答案 0 :(得分:1)
在编译器的词法分析阶段,如果遇到错误令牌,那么词法分析器将进入错误恢复模式,并且假设它丢弃令牌直到看到下一个分号并再次开始分析。
这只是一种做法,而不是最好的。
然后生成的整个令牌传递给解析器?
不,只有下一个合法代币。
我的意思是说,如果词法分析器遇到错误,那么编译会在此时停止,还是会继续并进入解析阶段?
它继续。
但是几十年来我一直在练习相反的事情。而不是让词法分析器尝试进行自己的错误恢复,而只是将有问题的字符返回给解析器。由于解析器通常具有更好的错误恢复能力,因此可以实现更加容错的解析。
示例 lex / flex 实施:
. return yytext[0];