flex函数宏详解

flex函数宏详解

ID:37709935

大小:18.61 KB

页数:12页

时间:2019-05-29

flex函数宏详解_第1页
flex函数宏详解_第2页
flex函数宏详解_第3页
flex函数宏详解_第4页
flex函数宏详解_第5页
资源描述:

《flex函数宏详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.内置变量 yy_create_buffer:见后面的缓冲管理 yy_delete_buffer:见后面的缓冲管理 yy_flex_debug:见后面的缓冲管理 yy_init_buffer:见后面的缓冲管理 yy_flush_buffer:见后面的缓冲管理 yy_load_buffer_state:见后面的缓冲管理 yy_switch_to_buffer:见后面的缓冲管理  yyin:输入缓冲流的文件指针,可以被替换以实现解析某个自定义的文件 yyleng:当前匹配字串的长度 yylex:解

2、析函数,接口 yylineno:当前匹配的文件行号 yyout:  输出流的指针 yyrestart:手动调用yyrestart.会重启解析           yyrestart(yyin);一般是打开某个文件之后,yyrestart(yyin)再解析. yytext:当前匹配的字串 yywrap:解析一个文件完毕之后,会调用yywrap:返回1表示结束,0表示继续(此时最好重新打开yyin或者重置yyin流)2.几个重要函数:1).yymore():yymore()的含义是,当当前匹配的字串

3、之后,想把后面配置的字串附加到这个字串后面,组成新的token返回. 比如:           %%         mega-   ECHO;yymore();         kludge  ECHO; 如果:“mega-kludge"thefollowingwillwrite"mega-mega-kludge"totheoutput。 为什么呢?首先遇到mega-,接着被more了一下,因此就会把kludga附加到mega-后面,而后面的kludge的动作又是打印,因此会打印出:mega

4、-mega-kludge2).yyless():yyless()的含义是:当当前的匹配之后,我想只返回前面几个字符,并且把后面回退到输入 比如:         %%         foobar   ECHO;yyless(3);         [a-z]+   ECHO;       input"foobar"thefollowingwillwriteout    "foobarbar":  为什么呢?foobar输入之后,匹配foobar,ECHO打印出来,接着yyless(3),则输入

5、流变为bar了(yytext为foo).接着再匹配,于是匹配   到[a-z]+,因此再次打印出bar.  3).BEGIN:flex下一个起始解析状态。见第3节,flex的状态.4).REJECT: 相当于拒绝此匹配,让系统重新找下一个匹配。"abcd",it    willwrite"abcdabcaba"totheoutput:         %%         a       

6、         ab      

7、         abc     

8、         abcd    

9、ECHO;REJECT;         .

10、    /*eatupanyunmatchedcharacter*/          5).unput(c):把c重新放到输入流。6).input():读取输入流下一个字符7).yyrestart():该函数迫使yylex重新解析。yyrestart有个函数指针流,可以再打开之后,重新使用yyrestart().3.解析源管理:   1).默认是从yyin获取,而yyin则是stdout,也可以是其它文件。       if(!yyin)   

11、     yyin=stdin;              if(!yyout)        yyout=stdout;      2).如果你打开了一个文件,并把yyin指向此文件,则从该文件中读取.比如:   在main中:    FILE*fp=NULL;    fp=fopen("hell.txt","r");    yyin=fp;    之后再使用 yylex()   则flex从hell.txt中读取信息并解析.      3).从字符串中解析       先使用下列函数,转化缓

12、冲,之后再使用 yylex()      a.yy_scan_string(char*).使用了yy_scan_string(char*)之后,flex会把char*放到yy的输入缓冲中(会调用到yy_switch_to_buffer.)      b.yy_scan_bytes(constchar*base,intlen);      c.yy_scan_buffer(char*base,yy_size_tsize)      这几个函数内部都使用的是缓冲切换的创建等函数,见后面的章节.   

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。