编译原理及实现技术课件:第二章 词法分析_第1页
编译原理及实现技术课件:第二章 词法分析_第2页
编译原理及实现技术课件:第二章 词法分析_第3页
编译原理及实现技术课件:第二章 词法分析_第4页
编译原理及实现技术课件:第二章 词法分析_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 词法分析词法分析概述正则表达式自动机理论 词法分析器的设计与实现1 词法分析器概述词法分析器的功能词法分析器的地位2 1.1 词法分析器的功能功能 读源程序的符号序列,逐个拼出单词,并构造相应的内部表示,同时检查源程序中的词法错误。单词 所谓单词是指语言中具有独立含义的最小的语义单位。Token 单词的内部表示。“程序语言的操作对象(只能)是该语言规定的各种数据。”编译程序是用某种程序语言书写的程序,其操作对象是一般程序中的各种语法单位。 31.1.1 单词的分类单词标识符X1,classT常量10,LENGTH特殊符号保留字while,int运算符+,界限符,;格式符EOF,41.1

2、.2 Token的结构Token是单词在词法分析器中的内部结构构成:特殊处理常数标识符特殊符号5TypeValueif (position 10) rate = 3.14 * initial;, , ?Line-num1.2 词法分析器的接口6CharList 独 立词法分析器语法分析TokenList 附 属词法分析器语法分析callTokenChar List2 正则表达式符号串基本概念正则表达式理论正则表达式在词法分析中的应用72.1 基本概念字母表: ,元素的非空有穷集合。 符号串:由字母表中的符号组成的任何有穷序列。或者如下定义:空符号串(用表示)是上的符号串 若x是上的符号串,a是

3、的元素,则xa是上的符号串 y是上的符号串,当且仅当它可以由1和2导出8思考符号串的长度如何定义?符号的个数和有何区别?符号串有无如何判断两个符号串相等?对应位置的符号相等(符号串的长度相同)9符号串的连接:设x和y均是字母表上的符号串,它们的连接是把y的所有符号顺序接在x的符号之后所得到的符号串。 符号串的方幂:设x是字母表上的符号串,把x自身连接n次得到的符号串z,称作符号串x的n 次幂,记作 z=xn。前缀和后缀:设x是字母表上的符号串,x=yz,则y是x的前缀,z是x的后缀,特别是当z时,y是x的真前缀;y时,z是x的真后缀。子符号串:非空符号串 x ,删去它的前缀和后缀后所得到的符号

4、串称为 x 的子符号串,简称子串。如果删去的前缀和后缀不同时为,则称该子串为真子串。10思考符号x的零次幂x0=?为什么?空串,“零次连接得到的串”首先是符号串。符号串abc的前缀、真前缀、后缀、真后缀、子串、真子串分别是什么?,a,ab,abc,,a,ab,,c,bc,abc,,c,bc,,a,b,c,ab,bc,abc,a,b,c,ab,bc11符号串集合:若集合A中的所有元素都是某字母表上的符号串,则称A为该字母表上的符号串集合。符号串集合的乘积:设A、B 是两个符号串集合,AB表示A与B的乘积,则定义AB=xy|(xA)(yB) 符号串集合的方幂:设A是符号串集合,则称Ai 是符号串集

5、合 A的方幂,其中i 是非负整数。A0=, A1=A, A2=AA, , An=AA A符号串集合的正闭包:A+=A1A2A3 符号串集合的星闭包:A*= A0A1A2A3 12思考符号串集合X的零次幂X0=?为什么?由符号串集合的幂定义可知,对于k为任意正整数X0 应该满足X0 Xk= Xk X0 =Xk,所以设X为给定的非空符号串集合,下面等式成立吗?X+=XX*X=X= X= X=X 13思考设X=a,b,Y=c,d计算XY,YX,X4,Xn,X+。XY=ac,ad,bc,bdYX=ca,cb,da,dbX4=a4,a3b,a2ba,aba2,ba3,a2b2,abab,baab,bab

6、a,b2a2,ab3,bab2,b2ab,b3a,b4Xn=an,an-1b,an-2ba,an-3ba2,bn-1a,bnX+=a,b,a2,ab,ba,b2,a3,a2b,aba,baa,ab2, bab,b3,a4,142.2 正则表达式理论描述程序设计语言中单词的一种简单而且数学化的工具。表示符号串的构成模式。正则表达式r定义了一个符号串集合S, S内的每个符号串都与r所定义的模式相匹配,S称为由r生成的语言L(r)152.2.1 非形式化定义基本正则表达式,a正则表达式的运算选择x|y连接xy重复x*16思考三种运算是否可以和算数运算类比?| vs. +; vs. ; * vs. n

7、交换律 A|B=B|AABBA结合律 (A|B)|C= A|(B|C)A(BC)=(AB)C分配律 A(B|C)=AB|AC(A|B)C=AC|BC同一律 A=A=A幂等律 A*=A*三种运算的优先级关系如何?|*172.2.2 正则表达式形式化定义正则表达式中出现的所有符号构成的集合为该正则表达式的字母表,用S表示。 则S上的正则表达式递归定义如下:和是正则表达式;对于任意符号a,则a是正则表达式;若r和s是正则表达式,则r|s,rs,r*都是正则表达式;仅由有限次应用上述规则所构成的正则表达式称为S上的正则表达式。182.2.3 正则表达式的解释给定为给定的字母表,则每个上的正则表达式将定

8、义上的一个符号串集,称为它表示的正则集。用R表示上的正则表达式,用L(R)表示R所表示的符号串集合,即函数L表示正则表达式到符号串集的映射。是正则表达式即R ,则有L()=。是正则表达式即R ,则有L()=。19a是正则表达式即aR,则L(a)=a。A和B是正则表达式,即AR,BR ,则有A | BR,L(A | B)= L(A)L(B)ABR,L( AB )= L(A)L(B)A*R,L( A*)= L(A)* ( A )R,L( (A) )= L(A)20当(和)不在中时实例1= a,b 21正则表达式eab*2. a(a|b)* L(e)上所有以a为首后跟任意多个(包括0个)b的符号串集

9、上所有以a为首的符号串集实例2设字母表=0,1,求二进制数字集合且为2的倍数。所有上定义的串的正则表达式为(1|0)*则二进制数表示为1(1|0)*|0其中能被二整除的表示为1(1|0)*0|022实例3设字母表=x,y,z,出现的第一个x之前没有y的符号串;包含偶数个x的所有符号串。z*x(x|z)*y(x|y|z)*|(x|z)*(y|z)*x(y|z)*x)*(y|z)*23思考设字母表=a,b,求含有奇数个a的串的正则表达式和有相同个数a和b的串对应的正则表达式。(b*ab*a)*ab*无法描述“有相同个数a和b”如何用正则表达式描述单词?242.3 正则表达式在词法分析中的应用 设I

10、为字母集合a,b,z,其正则表达式为a|b|z设D为数字集合0,1,9 ,其正则表达式为0|1|9则标识符的正则表达式为I(I|D)*常数的正则表达式为(+|-|)D+(.D+|)特殊符号的正则表达式为25有瑕疵2.3.1 扩充的正则表达式 一次或多次重复: A+任何符号:“”在字母表中任何符号.符号范围: 0-9 a-z A-Z不在给定范围内的符号: a可选: A?262.3.2 单词描述保留字 如 begin=begin标识符 letter=a-zA-Z digit=0-9 identifier=letter(letter|digit)*数字 整数Int1-9Digit*|0 实数realInt(.D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论