使用 yacc 和 lex 编写文本分析器
2008-11-13 08:32:06 来源:WEB开发网要理解提供给文本分析应用程序的信息,通常有两个阶段。第一个阶段是识别输入的或提供给应用程序的内容是什么。您必须能够从输入源中识别关键字、短语或字符序列,以便能够确定对其进行何种处理。第二个处理阶段是理解该信息的结构,即语法,以便对输入进行验证和操作。有关语法的一个很好的示例是,大多数编程语言中圆括号的使用。很明显,下面的表达式是错误的:
{ function)( {
其中,大括号不匹配,而圆括号的出现顺序错误。为了让分析器理解和识别表达式,那么分析器必须知道正确的序列,以及匹配该序列后应该进行何种操作。
词法分析首先进行识别输入数据的处理,并且可以使用 lex 工具来完成该处理过程。
lex 工具
lex 工具(或 GNU 工具 flex)使用一个配置文件来生成相应的 C 源代码,然后,可以用它来创建独立的应用程序,或者在您自己的应用程序中使用它。配置文件定义了需要在待分析的文件中查找的字符序列,以及当发现该序列之后应该进行什么操作。该文件的格式十分简单,即指定输入序列和相应的结果,用空格(或制表符)隔开。例如:
sequence do-something
清单 2 显示了一个非常简单的定义,它可以接受单词并根据提供的单词打印出一个字符串。
清单 2. 简单的 lex 定义
%{
#include <stdio.h>
%}
%%
begin printf("Startedn");
hello printf("Hello yourself!n");
thanks printf("Your welcomen");
end printf("Stoppedn");
%%
代码中的第一块由 %{...%} 定义,表示将其中的文本插入到生成的 C 源代码中。在本示例中,因为后面使用了 printf() 函数,所以必须确保包含了 stdio.h Header。
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接