flex 学习笔记
来源:互联网 发布:怎样备份数据 编辑:程序博客网 时间:2024/06/06 00:15
定义部分
%%
规则部分
%%
辅助程序
在规则部分,正规式与处理之间要用空格隔开,不然会报错
规则部分,正规式后面的其实是c语言片段。
简单来说,就是输入流经过这个编译文件进行扫描,当扫描到与正规式相符的时候,就进行后面所对应得c语言片段。
给每一个终结点正规式一个处理片段。
举个例子
{whitespace}*[.,?!]{whitespace}*{word} {//解决句号、逗号、问号、感叹号 for(j=0;j<yyleng;j++){ if(ispunct(yytext[j])){ printf("%c ",yytext[j]); break; } } for(j=j+1;j<yyleng;j++){ if(isalnum(yytext[j])){ break; } } yyless(j);}
yyless(n)指的是将yytext的0-n个字符保留,剩下的还给输入流进行下面的匹配。个人感觉这样做会比较好,因为如果下一个字符匹配了这个字符,那么流中就没有它了,那么后面得匹配就可能出问题,这是此次作业中我感觉比较好的收获吧。
至于书中提到的
ECHO :LEX的默认行为(将yylex输出到yyout)
BEGIN:后面跟某个开始条件名,激活该开始条件对应的词形
REJECT:放弃当前匹配的字符串和当前规则,让分析器重新扫描并选择另一个规则。
yylex():LEX的扫描过程。
yymore():将当前识别的字符串保留在yytext中,下一次被匹配的字符串将被添加到当前串之后。
yyless:...
yywrap():LEX读到输入文件结束时自动调用,判断对输入的处理是否全部结束。
很多压根没有用到,但是个人觉得光是一个简单的yyless就让整个过程那么简单了,这些内置的函数自有她存在的道理
如果有朋友知道的话可以留言一下我们一起讨论!
以后再用到的时候研究一下!
新的感悟,把词法理论应用到实际编程中还是很重要的。例如dfa,我们需要寻找一个开始符,在作业中,我们可以用{word}作为开始符
所有的正规式都用word开始,然后把最后的那个word还给输入流,这样就不会有重复的识别了。
同时我想到,如果用flex编写一个编译器,用自己定义的词法生成一个应用文件。比如说python。那么就可以创建一个自己的小程序了。
比如复习时用的提纲什么的。
比如输入 最右推导:定义。。
然后对应的c片段是在.py文件中写相应的代码。。。
但是又想到flex中输入输出中文貌似会有问题吧!看来路还很长呢。
- FLEX 学习笔记
- Flex chart学习笔记
- FLEX学习笔记
- FLEX学习笔记1
- flex 学习笔记
- Flex chart学习笔记
- Flex 导航学习笔记
- Flex 学习笔记
- Flex学习笔记 1
- Flex学习笔记(一)
- Flex学习笔记(二)
- Flex学习笔记(三)
- Flex学习笔记(四)
- Flex学习笔记(五)
- Flex学习笔记(一)
- FLEX学习笔记----事件
- Flex学习笔记
- flex学习笔记
- native方法详解
- Linux 强制解锁命令
- core-plot——简单使用
- oracle动态游标的创建和使用
- dsp学习资料之一
- flex 学习笔记
- oracle instant client 配置
- 一个游戏程序员的学习资料
- android项目中values中几个文件的作用
- Java技术入门
- mysql常用命令
- 面向对象—
- session案例-防止表单重复提交
- 流程控制