为什么要使用Lexical Analyzers?

时间:2009-11-30 14:19:46

标签: lexical-analysis flex-lexer

我正在使用Flex构建自己的语言,但我想知道一些事情:

  • 我为什么要使用词法分析器?
  • 他们会帮我做些什么吗?
  • 他们是强制性的吗?

3 个答案:

答案 0 :(得分:5)

词法分析有助于简化解析,因为词汇可以被视为抽象实体而不是具体的字符序列。

但是,您需要的不仅仅是flex来构建您的语言:词法分析只是第一步。

答案 1 :(得分:3)

每当您将输入字符串转换为以空格分隔的字符串和/或数值时,您就会执行词法分析。编写级联的else if (strcmp (..)==0) ...语句系列算作词法分析。即使像sscanf和strtok这样讨厌的工具也是词汇分析工具。

由于以下几个原因之一,您想要使用像flex之类的工具而不是上述之一:

  • 可以更好地处理错误。
  • 您可以更灵活地使用flex识别出不同的内容。例如,很难用scanf例程正确解析C格式的十六进制值。 scanf几乎要知道十六进制值正在进行中。 Lex可以为你解决这个问题。
  • Lex扫描仪更快。如果要解析大量文件和/或大文件,这可能会变得很重要。

答案 2 :(得分:1)

您可以考虑使用词法分析器,因为您可以使用BNF(或EBNF)以声明方式描述您的语言(语法),然后使用解析器来解析用您的语言编写的程序并将其放入结构中记忆然后自由操纵它。

这不是强制性的,你当然可以写自己的,但这取决于语言的复杂程度以及重新发明轮子的时间。

此外,您可以使用语言(BNF)来描述您的语言而无需更改词法分析器本身,这使您可以进行许多实验并更改语言的语法,直到您确切地知道它对您有用。