WEB开发网
开发学院操作系统Linux/Unix 使用 yacc 和 lex 编写文本分析器 阅读

使用 yacc 和 lex 编写文本分析器

 2008-11-13 08:32:06 来源:WEB开发网   
核心提示: 要理解提供给文本分析应用程序的信息,通常有两个阶段,使用 yacc 和 lex 编写文本分析器(3),第一个阶段是识别输入的或提供给应用程序的内容是什么,您必须能够从输入源中识别关键字、短语或字符序列,在本示例中,因为后面使用了 printf() 函数,以便能够确定对其进行何种处理,第二个

要理解提供给文本分析应用程序的信息,通常有两个阶段。第一个阶段是识别输入的或提供给应用程序的内容是什么。您必须能够从输入源中识别关键字、短语或字符序列,以便能够确定对其进行何种处理。第二个处理阶段是理解该信息的结构,即语法,以便对输入进行验证和操作。有关语法的一个很好的示例是,大多数编程语言中圆括号的使用。很明显,下面的表达式是错误的:

{ 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。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:使用 yacc lex

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接