Compiler construction 词法分析器如何识别给定的标记是标识符还是关键字?

Compiler construction 词法分析器如何识别给定的标记是标识符还是关键字?,compiler-construction,lexical-analysis,Compiler Construction,Lexical Analysis,我有一个关于词汇分析的基本问题。 词法分析器(它是一个接受词素并生成标记的DFA)可以生成标记,这些标记可以是标识符([a-z]/[a-z]/[0-9]知道数字而不是第一个字符)、关键字(如果、否则,…)、运算符和分隔符 因此,如果像“whil”这样的词汇出现了。那么,它会是一个词法错误吗? >它不是有效的关键字或>强>它将被接受为标识符< /强>(变量),因为词法分析器不考虑语法是否正确? 词法分析器是否对标识符、关键字和运算符使用不同的DFA 那么它是否会是一个词汇错误,说明它不是一个有效的

我有一个关于词汇分析的基本问题。 词法分析器(它是一个接受词素并生成标记的DFA)可以生成标记,这些标记可以是标识符([a-z]/[a-z]/[0-9]知道数字而不是第一个字符)、关键字(如果、否则,…)、运算符和分隔符

因此,如果像“whil”这样的词汇出现了。那么,它会是一个词法错误吗?<强> >它不是有效的关键字<或强>或>强>它将被接受为标识符< /强>(变量),因为词法分析器不考虑语法是否正确?

词法分析器是否对标识符、关键字和运算符使用不同的DFA

那么它是否会是一个词汇错误,说明它不是一个有效的关键字

没有

或者它将被接受为标识符(变量)

是的,然后解析器会出现语法错误

作为词法分析器,不考虑语法是否正确?

词法分析器对语法一无所知。这是解析器的工作。

要识别关键字,
它使用相同的regexp作为标识符,然后检查关键字表是否为关键字。如果是,则为关键字,否则为标识符

谢谢您的回答。词法分析器对标识符、关键字、运算符和分隔符使用不同的DFA吗?我从来没有见过这样的DFA,我也看不出有什么原因。flex(1)使用单个DFA。