3

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

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

3 回答 3

5

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

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

于 2009-11-30T14:27:07.480 回答
3

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

出于以下几个原因之一,您希望使用 flex 之类的工具而不是上述工具之一:

  • 错误处理可以做得更好。
  • 您可以更加灵活地识别使用 flex 识别的不同事物。例如,很难使用 scanf 例程正确解析 C 格式的十六进制值。scanf 几乎必须知道即将到来的十六进制值。Lex 可以为您解决。
  • Lex 扫描仪速度更快。如果您要解析大量文件和/或大型文件,这可能会变得很重要。
于 2009-11-30T14:57:39.323 回答
1

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

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

此外,您可以在不更改词法分析器本身的情况下使用语言 (BNF) 来描述您的语言,这一事实使您能够进行许多实验并更改您的语言的语法,直到您完全掌握它适合您的内容。

于 2009-11-30T14:30:12.520 回答