如果词法分析器可以将错误的标记传递给解析器?
If lexer can pass the bad token to the parser?
在编译器的词法分析阶段,如果遇到错误的标记,那么词法分析器将进入错误恢复模式,假设说,它会丢弃该标记,直到看到下一个分号并再次开始分析。然后将生成的整体令牌传递给解析器 ?.
我的意思是说,如果词法分析器遇到错误,那么编译是在此时停止还是继续并进入解析阶段?
During the lexical analysis phase of compiler if a bad token is encountered then the lexer will go into the error recovery mode and, suppose say, it discards the token until the next semicolon is seen and starts its analysis again.
这只是一种方法,并不是最好的方法。
Then overall tokens generated is passed to the parser?
不,只有下一个合法令牌。
What I mean to say if lexer has encountered an error then does the compilation stops at this point or it continues and goes to the parsing phase?
继续。
但几十年来我一直在练习相反的东西。我没有让词法分析器尝试进行自己的错误恢复,而是 return 解析器的违规字符。由于解析器通常配备了更好的错误恢复,这导致了更容错的解析。
示例 lex/flex 实施:
. return yytext[0];
在编译器的词法分析阶段,如果遇到错误的标记,那么词法分析器将进入错误恢复模式,假设说,它会丢弃该标记,直到看到下一个分号并再次开始分析。然后将生成的整体令牌传递给解析器 ?.
我的意思是说,如果词法分析器遇到错误,那么编译是在此时停止还是继续并进入解析阶段?
During the lexical analysis phase of compiler if a bad token is encountered then the lexer will go into the error recovery mode and, suppose say, it discards the token until the next semicolon is seen and starts its analysis again.
这只是一种方法,并不是最好的方法。
Then overall tokens generated is passed to the parser?
不,只有下一个合法令牌。
What I mean to say if lexer has encountered an error then does the compilation stops at this point or it continues and goes to the parsing phase?
继续。
但几十年来我一直在练习相反的东西。我没有让词法分析器尝试进行自己的错误恢复,而是 return 解析器的违规字符。由于解析器通常配备了更好的错误恢复,这导致了更容错的解析。
示例 lex/flex 实施:
. return yytext[0];