flex细节

来源:互联网 发布:电影评论数据集下载 编辑:程序博客网 时间:2024/05/29 02:05

1、在flex中,不能重新定义input()或unput(),但是能重新定义YY_INPUT,它是flex调用的从输入文件中读取文本的宏。flex缓冲区,被定义为YY_BUFFER_STATE类型。例程yy_create_buffer(FILE*,size0)生成指定大小的flex缓冲区,通常是YY_BUF_SIZE,用于读取stdioFILE。对yy_swithc_to_buffer(flexbuf)的调用告诉扫描程序读取相应的文件,而yy_delete_buffer(flexbuf)删除flex缓冲区。当前缓冲区是YY_CURRENT_BUFFER,<<EOF>>在调用yywrap()之后匹配文件的结尾。

2、yywrap()当词法分析程序到达输入文件的结尾时,调用。

3、可以重新定义YY_INPUT,用于读取数据块的宏。

YY_INPUT(buffer,result,max_size) 

buffer:字符缓冲区

result:存储读取的字符数的变量

max_size:缓冲区的大小

4、yylineno是输入文件的行号

1、REJECT:找到重叠标记的所有出现。如:找到单词pink,ink,pin的所有出现

...

%%

pink {npink++;REJECT;}

ink {nink++;REJECT;}

pin  {npin++;REJECT;}

...

 

如果输入单词pink,所有3个模式都匹配。没有REJECT语句,那就只有"pink"匹配。

2、yylex()

从yylex()中向调用者(通常是语法分析程序)返回一个值。下次调用yylex()时,扫描程序从它停止的地方继续。

规则段中的所有代码被拷贝到yylex()。

3、yyrestart(fuke)重新启动扫描,即yylex()重新从文件读入。

4、FLEX启动时默认起始状态为INITIAL

BEGIN 状态

%S声明普通起始状态

%x声明起始排它性状态

没有起始状态的规则在排它性处于激活时不匹配。

5、unput()

将字符c返回给输入流。即把已经扫描的字符推回

6、yyleng

标记文本长度

7、yyless()

yyless(n)推回除标记开头的n字符以外的所有字符。

8、yymore()

在这个标记附加下一个标记

如:

%%

hyper yymore()

text printf("Token is %s/n",yytext);

如果输入的字符串是"hypertext",则输出"Token is hypertext"

9、yywrap()

返回0继续扫描,返回1报告文件结尾的零标记

原创粉丝点击