版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Part3词法分析,授课:胡静,内容提要,词法分析器的作用 词法分析程序的设计与实现状态图 词法分析程序的自动生成有穷自动机,词法分析器的自动产生,LEX工作过程,首先,使用LEX语言写一个定义词法分析器的源程序lex.l。 然后利用LEX编译器将lex.l转换成C语言程序lex.yy.c。它包括从lex.l的正规表达式构造的状态转换图的表格形式以及使用该表格识别词素的标准子程序。 与lex.l中正规表达式相关联的动作是C代码段,这些动作可以直接加入到lex.yy.c中。 最后,lex.yy.c通过C编译器生成目标程序,这个目标程序就是把输入流转换成记号序列的词法分析器。,LEX工作过程,LE
2、X说明,一个LEX程序由如下三部分组成: 声明部分(辅助定义式) % 转换规则(识别规则) % 辅助过程 (用户子程序) 声明部分包括变量声明、符号常量声明和正规定义。,声明部分,声明部分举例,LEX识别规则,LEX程序的转换规则是如下形式的语句: P1A1 P2A2 pnAn LEX程序的第三部分包含action所需要的辅助过程。这些过程可以单独编译,并与词法分析器一起装载。,LEX举例,LEX举例,% /*符号常数定义 LT, LE, EQ, NE, GT, GE, IF, THEN, ELSE, ID, NUMBER, RELOP */ % /*正规定义*/ dilim t n wsde
3、lim+ letterA-Za-z digit0-9 idletter(letter|digit)* numberdigit+(.digit+)?(E+-)?digit+)? %,LEX举例,% ws/*没有动作和返回值*/ ifreturn(IF); thenreturn(THEN); elsereturn(ELSE); idyylval = install_id(); return(ID); numberyylval = install_num(); return(NUMBER); “”yylval = NE; return(RELOP); “”yylval = GT; return(RE
4、LOP); “=”yylval = GE; return(RELOP); %,LEX举例,% install_id() /*往符号表填入词素的过程,yytext指向词素的第一个字符,yyleng表示词素的长度。将词素填入符号表,返回指向该词素所在表项的指针*/ install_num() /*与填写词素的过程类似,只不过词素是一个数。*/ ,LEX举例说明,假设由上面的程序生成的词法分析器被给定的一个由两个制表符、一个if和一个空格组成的输入串。 两个制表符是能与模式ws匹配的初始最长前缀。 与ws相关联的动作不做任何事,因此词法分析器移动词素的开始指针yytext使其指向i,并开始查找下一个
5、记号。 下一个匹配的词素是if。请注意,模式if和id均匹配这个词素,并且没有能匹配更长串的模式。由于上面的程序中匹配关键字if的模式先于匹配标识符的模式执行,所以if被匹配成关键字。通常,采用将匹配关键字的模式置于匹配标识符的模式之前的策略,可以简单有效的保留关键字。 假设读入的头两个字符是=。 模式匹配上第一个字符,但它不是能匹配输入字符串的最长前缀的模式。 LEX采用“选择最长匹配前缀的策略”方便的解决了和=之间的冲突。这里,当然=被选择作为下一个记号。,LEX说明,由LEX创建的词法分析器与语法分析器协同工作的方式如下: 词法分析器被语法分析器调用后,从尚未扫描的输入字符串中读字符,每
6、次读入一个字符,直到发现能与某个正规表达式pi匹配的最长前缀。 词法分析器执行Ai。通常Ai会将控制返回给语法分析器。然后如果不将控制交给语法分析器,词法分析可以继续发现更多的词素,直到某个操作将控制返回给语法分析器。 词法分析器这种不断查找词素,直到以显示的return调用结束工作的方式,使其可以方便的处理空白符和注释。 词法分析器只返回记号给语法分析器,带有与词素相关信息的属性值是通过全局变量yylval传递的。,超前扫描操作,在LEX中我们可以把模式写成r1/r2的形式,其中r1和r2都是正规表达式。它的意思是当一个字符串与r1匹配时,还需要其后的字符串与r2匹配,这样才算该字符串与r1
7、匹配成功。在超前扫描操作符/后面的正规表达式r2表示需要进一步匹配的内容,这里他只是匹配的一个限制,而不是匹配的一个部分。 将Fortran中DO识别为关键字的LEX说明如下: DO 501 I =1.25 DO/(letter | digit)* = (letter | digit)*, 动作,超前扫描符举例,区别Fortran中的关键字和标识符 识别关键字IF的模式可以写为: IF/(. *) letter 处理Fortran的if语句问题的另一种方法是:当看到字符串IF(后,先确定IF是否被声明为数组。如果是,我们才去匹配上面给出的整个模式。这样的检查使得由LEX说明自动实现一个词法分析器变得很难,而且在运行时可能会花费更多的时间,因为要由模拟状态转化图的程序频繁的判断是否要进行这样的检查。,LEX的实现,单个正则表达式,词法分析器,处理多样的REs,将所有的正则表达式的NFA联合在一起,变成一个单一的有限自动机,LEX二义性的处理方法,词法分析器,输出端是Token流 将tokens和终态联系在一起。 当到达一个终态时,就将相应的token输出。 最长匹配 当到达一个终态时,要查看是否存在更进一步的转换。如果不存在,则返回当前终态对应的token 优先级规则 当终态对应多个token的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 3836.20-2026爆炸性环境第20部分:具有隔离部件或组合保护等级的设备
- T/ZGZS 0311-2023无废校园创建指标体系评价规范
- T/HNNMIA 56-2023银铜带
- T/CIQA 90-2024跨境电子商务运营职业能力培养与评价规范
- T/CAQI 436-2025白酒企业零碳工厂评价规范
- T/CSCB 0018-2024细胞中ATP含量的测定
- 党员干部理想信念教育培训
- 2025~2026学年广东省惠州市惠阳区北师大版六年级上册期中数学试卷【附答案】
- 2025-2026学年江西省广丰县初中政治九年级期末上册模考历年考试题(附答案)
- PHP函数面试题及详细答案(企业真实面试专用)
- 2026年山西航空产业集团有限公司人员招聘笔试参考试题及详细答案解析
- 2026中国辅助生殖技术服务渗透率提升路径与区域市场差异调查报告
- 2026中国工业互联网安全威胁态势与防护体系建设研究报告
- 《人形机器人数据训练场建设规范》
- 2026年中级注册安全工程师《安全生产管理》模拟考试题(含答案解析)
- 2026新闻记者职业资格真题及答案
- 2026发展对象考试测试题库(附参考答案)
- 2026年广州市中考语文试卷(含答案及解析)
- 2026低压电工证考试题库及模拟考试答案(2026修订版)完整版
- 2026年智能矿山无人工作面技术知识考察试题及答案
- 冶金行业班组安全管理制度培训
评论
0/150
提交评论