Compiler construction 语法错误的处理如何涉及解析器和词法分析器的使用?

Compiler construction 语法错误的处理如何涉及解析器和词法分析器的使用?,compiler-construction,syntax-error,lexical-analysis,Compiler Construction,Syntax Error,Lexical Analysis,我对这个问题有点困惑。有人请澄清,“语法错误的处理如何涉及解析器和词法分析器的使用?”语法错误基本上是在编译器的解析器阶段处理的,那么词法分析器如何帮助解析器处理语法错误呢 我想你可能对lexer的功能有点困惑。lexer将程序转换为令牌: while (1) 变成 <TOK_WHILE> <TOK_LPAREN> <TOK_NUM, 1> <TOK_RPAREN> 当然,词法分析器可以检测错误(如意外字符(字符不在识别的字符集中)),但它

我对这个问题有点困惑。有人请澄清,“语法错误的处理如何涉及解析器和词法分析器的使用?”语法错误基本上是在编译器的解析器阶段处理的,那么词法分析器如何帮助解析器处理语法错误呢

我想你可能对lexer的功能有点困惑。lexer将程序转换为令牌:

while (1)
变成

<TOK_WHILE> <TOK_LPAREN> <TOK_NUM, 1> <TOK_RPAREN>

当然,词法分析器可以检测错误(如意外字符(字符不在识别的字符集中)),但它不能检测语法错误,除非设计与传统的词法分析器不同(如Lorne提到的@Marquis)。
简言之,词法分析器所做的(在大多数情况下)就是将字符流(一个程序)从解析器转换成标记,以检查语法错误(在大多数情况下,还可以构建解析树等)。

它没有。词法分析器与此无关。解析器检测语法错误,并通过丢弃标记和状态从中恢复,直到找到一个合理的恢复点。当然可以设计它,使词法分析器以某种方式进行合作,但这根本不是必需的。难道我们不能说,当发现语法错误时,解析器会向词法分析器请求更多的标记,在这种情况下,它涉及到词法分析器的使用。。它仍然让我困惑。。。请详细解释一下这个问题以便我理解。或者至少如果你解释了语法错误的处理过程,词法分析器是否有任何用途…语法分析器在处理语法错误时是否从词法分析器获得任何帮助,,,,,我仍然感到困惑,请参考任何文章或视频。。我详细研究了词法分析器、语法分析器的工作原理,以及错误处理策略。。。但是仍然很困惑..@MohsinPak——大多数时候解析器并没有从词法分析器那里得到任何帮助。