版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学语文课堂教学量化评分表
- 2026年药食同源食品与新食品原料(新资源食品)食用量标准大全
- 教育研究方法基础(第4版)教案全套 第1-12章 教育研究概述-教育研究成果表述
- 26年银发失独老人沟通技巧课件
- 26年老年上门服务难解决方案课件
- 26年居家老人机能变化科普
- 【2025】温岭市青少年宫招聘专业教师考试真题
- 【新教材】冀美版(2024)一年级下册美术第6单元 第1课 探访春天 教学设计
- 医学26年:基础性管理要点解读 查房课件
- 26年假牙适配检查指引课件
- 幼儿园6S管理实施成果
- 康复医学科临床诊疗指南
- DB32-T 1712-2011 水利工程铸铁闸门设计制造安装验收规范
- 简述食品安全与卫生发展史
- 流行病学曲线图解读
- 食品安全十分钟队会
- 青少年软件编程(图形化)等级考试试卷(三级)附有答案
- JBT 10960-2024 带式输送机 拉绳开关(正式版)
- 案例分析-垂体腺瘤 课件
- 基于知识本体的铁路工程EPC总承包项目风险管理研究
- 查缉战术课件大纲
评论
0/150
提交评论