




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
词法分析——正则表达式授课:胡静2023年6月9日编译原理2目录编译器的结构编译的例子什么是词法分析如何编写一个词法分析器正则表达式——用来描述tokens编写一个词法分析器的生成器2023年6月9日编译原理3词法分析器的实现方案词法分析程序的设计与实现2023年6月9日编译原理42023年6月9日编译原理5词法生成器的自动生成工具正则表达式与有穷自动机2023年6月9日编译原理6正则表达式的例子2023年6月9日编译原理7令={a,b},正规式 正规集a {a}ab {a,b}ab {ab}(ab)(ab) {aa,ab,ba,bb}a {,a,a,……任意个a的串}(ab) {,a,b,aa,ab……所有由a和b组成的串}(ab)(aabb)(ab) {上所有含有两个相继的a或两个相继的b组成的串}正则表达式的例子={a,b},r=a(ab)定义的正规集:{a,aa,ab,abb,……}={d,,e,+,-},则上的正规式
d(dd)(e(+-)dd)表示的是无符号数的集合。其中d为0~9的数字。若两个正规式所表示的正规集相同,则认为二者等价。两个等价的正规式U和V记为U=V。例如:U=(ab),V=ba又如:U=b(ab),V=(ba)b
再如:U=(ab),V
=(ab)正则表达式的性质设U、V和W都是正规式,则如下关系普遍成立:U|V=V|U (交换律)U|(V|W)=(U|V)|W (结合律)U(VW)=(UV)W (结合律)、U(V|W)=UV|UW (分配律)
(V|W)U=VU|WU;εU=Uε=Urr=r r=rrr… “或”的抽取律有穷自动机有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言与正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。有穷自动机分为两类:确定的有穷自动机(DFA)和不确定的有穷自动机(NFA)。其中“不确定”的含义是:对于某个输入符号,在同一状态上存在不止一种转换。确定的和不确定的有穷自动机都能而且仅能识别正规集,即它们能够识别正规表达式所表示的语言。确定的有穷自动机一个确定的有穷自动机(DFA)M是一个五元式:M=(S,∑,δ,s0,F)其中S是一个有限集,它的每个元素称为一个状态。∑是一个有穷字母表,它的每个元素称为一个输入字符δ是一个从S×∑至S的单值映射。δ(s,a)=s’意味着:当现行状态为s、输入字符为a时,将转换到下一个状态s’。我们称s’为s的一个后继状态。s0∈S,是唯一的初态。FS,是一个终态集(可空)DFA的例子2023年6月9日编译原理12DFA的例子2023年6月9日编译原理13词法分析程序的自动生成器——LEX2023年6月9日编译原理14LEX程序结构一个LEX程序由如下三部分组成:声明部分%%转换规则%%辅助过程其中声明部分包括变量声明、符号常量声明和正规定义。2023年6月9日编译原理15LEX程序结构-声明部分2023年6月9日编译原理16LEX程序结构-声明部分2023年6月9日编译原理172023年6月9日编译原理18LEX程序结构-转换规则LEX程序的转换规则是如下形式的语句:
p1 {action1} p2 {action2} … pn {actionn}其中每一个pi是一个正则表达式,也称为词形。每一个actioni表示当模式pi匹配上一个词形后词法分析器所要执行的程序段,其基本动作是返回单词的类别编码和单词值。2023年6月9日编译原理19LEX程序结构LEX程序的第三部分包含action所需要的辅助过程。这些过程可以单独编译,并与词法分析器一起装载。由LEX创建的词法分析器与语法分析器协同工作的方式如下:词法分析器被语法分析器调用后,从尚未扫描的输入字符串中读字符,每次读入一个字符,直到发现能与某个正规表达式pi匹配的最长前缀。词法分析器执行actioni。通常actioni会将控制返回给语法分析器。然后如果不将控制交给语法分析器,词法分析可以继续发现更多的词素,直到某个操作将控制返回给语法分析器。词法分析器这种不断查找词素,直到以显示的return调用结束工作的方式,使其可以方便的处理空白符和注释。词法分析器只返回记号给语法分析器,带有与词素相关信息的属性值是通过全局变量yylval传递的。2023年6月9日编译原理20LEX举例正规表达式记号属性值ws--ifif-thenthen-elseelse-idid指向符号表表项的指针numnum指向符号表表项的指针<relopLT<=relopLE=relopEQ<>relopNE>relopGT>=relopGE2023年6月9日编译原理21LEX举例%{ /*符号常数定义LT,LE,EQ,NE,GT,GE,IF,THEN,ELSE,ID,NUMBER,RELOP*/%} /*正规定义*/dilim [\t\n]ws {delim}+letter [A-Za-z]digit [0-9]id {letter}({letter}|{digit})*number {digit}+(\.{digit}+)?(E[+\-])?{digit}+)?%%2023年6月9日编译原理22LEX举例%%{ws} {/*没有动作和返回值*/}if {return(IF);}then {return(THEN);}else {return(ELSE);}{id} {yylval=install_id();return(ID);}{number} {yylval=install_num();return(NUMBER);}“<” {yylval=LT;return(RELOP);}“<=” {yylval=LE;return(RELOP);}“=” {yylval=EQ;return(RELOP);}“<>” {yylval=NE;return(RELOP);}“>” {yylval=GT;return(RELOP);}“>=” {yylval=GE;return(RELOP);}%%2023年6月9日编译原理23LEX举例%%install_id(){/*往符号表填入词素的过程,yytext指向词素的第一个字符,yyleng表示词素的长度。将词素填入符号表,返回指向该词素所在表项的指针*/}install_num(){/*与填写词素的过程类似,只不过词素是一个数。*/}LEX的实现LEX的功能是根据LEX源程序构造一个词法分析程序,该词法分析程序实质上是一个有穷自动机。LEX生成的词法分析程序有上述两部分构成。LEX的功能是根据LEX源程序生成状态转换矩阵和控制程序202
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纸质运动装备材料研究与应用考核试卷
- 冷冻饮品行业企业发展战略规划与实施策略研究案例分析考核试卷
- 胶合板产品的用户满意度调查考核试卷
- 2025【合同期内钢筋混凝土钻孔灌注桩工程劳务分包】
- 2025年试用期内用人单位能否与员工解除劳动合同
- 2025居家保姆服务合同模板
- DB3207T 1038-2023优 质双早稻麦品种周年绿色高效生产技术规程
- 苏教版四年级上册数学教案全册
- 司机聘用合同书集锦二零二五年
- 适用复杂情况股权转让协议
- 双全日培训课件
- 甲油胶行业报告
- 医务人员职业暴露与防护讲课
- 山东省莱西市2024-2025学年高一语文下学期3月月考试题含解析
- 康复科人员岗位考核制度(3篇)
- 实验动物生物样本质量控制规范
- 智能机器人配送行业现状分析及未来三至五年行业发展报告
- 炎症性肠病的外科治疗
- 复变函数与积分变换课程教案讲义
- BEC商务英语初级考试历年真题及答案6套
- 消除“艾梅乙”医疗歧视-从我做起
评论
0/150
提交评论