flex细节

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报告文件结尾的零标记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值