任何时候,当您将输入字符串转换为以空格分隔的字符串和/或数字值时,您都在执行词法分析。编写级联的else if (strcmp(..)==0) ...语句被视为词法分析。即使像sscanf和strtok这样的令人讨厌的工具也是词法分析工具。您需要使用像flex这样的工具,而不是上述工具之一,原因有以下几点: 错误处理可以更好地实现。 您可以使用flex识别更多不同事物。例如,使用scanf例程正确解析C格式十六进制值很困难。scanf必须“知道”十六进制值即将到来。Lex可以为您找出答案。 Lex扫描器更快。如果您正在解析大量文件和/或大型文件,则这可能变得重要。
你可以考虑使用词法分析器,因为你可以使用 BNF(或 EBNF)声明式地描述语言(语法),然后只需使用解析器解析用你的语言编写的程序,并将其以结构形式存储到内存中,然后自由地操作它。这不是强制性的,你当然可以自己编写,但这取决于语言的复杂程度以及你重新发明轮子的时间有多少。此外,你可以使用一种语言(BNF)来描述你的语言,而不必更改词法分析器本身,这使你能够进行许多实验并改变你的语言的语法,直到你拥有确切适合你的语言。