使用 yacc 和 lex 编写文本分析器
2008-11-13 08:32:06 来源:WEB开发网在本教程中,首先您将研究如何使用 lex 和 yacc 来构建一个计算器。使用该计算器作为示例,您将进一步研究 lex 和 yacc 系统生成的输出和信息,并学习如何使用它来分析其他类型的信息。
先决条件
要使用在本教程中的示例,您需要使用到下列工具:
Lex:这个工具是大多数 UNIX 操作系统的标准组件。GNU flex 工具提供了相同的功能。
Yacc:这个工具是大多数 UNIX 操作系统的标准组件。GNU bison 工具提供了相同的功能。
C 编译器:任何标准的 C 编译器都可以,其中包括 Gnu CC。
Make 工具:这个工具是使用示例 Makefile 来简化构建过程所必需的。
可以从 GNU Web 站点或本地的 GNU 镜像站点下载 GNU 工具。
使用 lex 进行词法分析
编写文本分析器的第一步是要能够识别所读取的内容。有许多不同的方法可以完成这项任务,但是最简单的方法是使用 lex,它是将输入信息转换为一系列标记的工具。
什么是词法分析?
当使用编程语言编写程序或在命令行中输入命令时,您是否想过究竟执行了什么操作将您输入的内容转换为一组指令呢?
这个处理过程非常简单,却又相当复杂。它很复杂,这是因为对于可能输入的信息,表面上看起来似乎存在无限种可能的组合和序列。例如,要使用 Perl 语言遍历一个哈希表,您可以使用如清单 1 所示的序列。
清单 1. 在 Perl 中遍历一个哈希表
foreach $key (keys %hash)
{
...
}
其中的每一项都是有意义的,虽然方式有所不同,这正是该处理过程的简单明了之处。清单 1 中所示的表达式存在一个对应的结构,也就是说,与人类语言一样,编程语言中也存在着特定的规则。因此,如果将输入分解为您所看到的和该信息结构的组合,那么对该内容的分析过程则相当简单。
更多精彩
赞助商链接