收藏 分享(赏)

Part3词法分析2.ppt

上传人:hwpkd79526 文档编号:9931186 上传时间:2019-09-20 格式:PPT 页数:38 大小:1.02MB
下载 相关 举报
Part3词法分析2.ppt_第1页
第1页 / 共38页
Part3词法分析2.ppt_第2页
第2页 / 共38页
Part3词法分析2.ppt_第3页
第3页 / 共38页
Part3词法分析2.ppt_第4页
第4页 / 共38页
Part3词法分析2.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、Part3词法分析,授课:胡静,内容提要,词法分析器的作用词法分析程序的设计与实现状态图词法分析程序的自动生成有穷自动机,正规表达式与有限自动机,问题的提出,如果只向前看一个字符,不能够确定我们将要读入的是哪种类型的token 如果token的开头是“i”,那么它一定是标识符么? 如果token的开头是“2”,那么它一定是一个整型的常数么? 如果我们通过上面的类似“插入”式的方法来写识别token的程序,这样的程序不容易写正确,而且也不容易维护 因此需要一个更加有原理性的方法:词法分析器的生成器,可以自动产生有效的词法分析器。(例如lex,flex,Jlex) 一般说来,没有限制的向前看是必要

2、的,一些问题,如何明确的描述tokens 2.e0 20.e-01 2.0000 “” “x” “” “” 如何将文本分割成tokens if (x = 0) a = x1; if (x = 0) a = x1;,如何描述tokens,我们可以使用正则表达式来描述程序设计语言中的tokens。正则表达式的定义如下:,正规式的例子,令=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组成的串,

3、正规式的例子,=a,b,r=a(a b) 定义的正规集: a,aa,ab,abb, =d,e,+,-,则上的正规式 d(dd )(e(+- )dd )表示的是无符号数的集合。其中d为09的数字。 若两个正规式所表示的正规集相同,则认为二者等价。两个等价的正规式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

4、|W) = UV | UW (分配律) (V|W)U = VU |WU; U = U =U rr=r r=rrr “或”的抽取律,正规文法和正规式,对上的正规式U ,存在一个正规文法G=(VN,VT,P,S):L(G)=L(r) 初始, VT= , S VN ,生成正规产生式SU (R.1) 对形如 Ar1r2的正规产生式:Ar1B Br2 BVN (R.2)对形如Arr1的正规产生式:ArB Ar1 BrB Br1 BVN (R.3)对形如Ar1r2的正规产生式: Ar1 A r2 不断应用R做变换,直到每个产生式右端只含一个VN,正规文法和正规式,对G=(VN,VT,P,S),存在一个 =

5、VT上的正规式r : L(r)=L(G) AxB, By A=xy AxAy A=xy Axy A=xy,正规文法和正规式举例,例1:r=a(ad) VT=a,d Sa(ad) R.1 SaA A(ad) R.2 A(ad)B AB(ad)B B R.3 Gs: SaA A VT=a,d AaB VN=S,A,B AdB BaBBdBB,P,正规式和正规文法举例,Gs: SaA AaA AdA Sa Aa Ad SaAa AaAadAd A(ad)A(ad) A(ad)(ad) S=a(ad)(ad)a =a(ad)(ad) =a(ad)+) R=a(ad),如何切分文本,只有RE是不够的,还

6、需要一些进行选择的规则 大部分的语言,优先选择最长的匹配 当最长匹配长度相同时,由优先级决定REs + 优先级 + 最长匹配规则 = 词法分析器的定义,有穷自动机,有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言与正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。 有穷自动机分为两类:确定的有穷自动机(DFA)和不确定的有穷自动机(NFA)。 其中“不确定”的含义是:对于某个输入符号,在同一状态上存在不止一种转换。 确定的和不确定的有穷自动机都能而且仅能识别正规集,即它们能够识别正规表达式所表示的语言。,

7、确定的有穷自动机,一个确定的有穷自动机(DFA)M是一个五元式: M=(S, , , s0, F)其中 S是一个有限集,它的每个元素称为一个状态。 是一个有穷字母表,它的每个元素称为一个输入字符 是一个从S至S的单值映射。(s,a)=s意味着:当现行状态为s、输入字符为a时,将转换到下一个状态s。我们称s为s的一个后继状态。 s0S,是唯一的初态。 F S,是一个终态集(可空),确定的有穷自动机,DFA M=(S,U,V,Q,a,b,S,Q)其中f定义为: (S,a)=U (V,a)=U (S,b)=V (V,b)=Q (U,a)=Q (Q,a)=Q (U,b)=V (Q,b)=Q,确定的有穷

8、自动机,DFA接受的字符串 对于*中的任何字符串t,若存在一条从初态结到某一终态结的道路,且这条路上所有弧的标记符连接成的字符串等于t,则称t可为DFA M所接收, 若M的初态结同时又是终态结,则空字可为M所识别。 *上的符号串t被M接受 若t *, (S,t)=P,其中S为 M的开始状态,P Z,Z为终态集。则称t为DFA M所接受(识别)。 *上的符号串t,(我们将它表示成t1tx的形式,其中t1,tx *)在DFA M上运行的定义为: (Q, t1tx)= (Q, t1),tx) 其中QS,确定的有穷自动机,例:证明t=baab被例中的DFA所接受。 (S,baab) = ( (S,b)

9、,aab) = (V,aab) = ( (V,a),ab) = (U,ab) = (f(U,a),b) = (Q,b) =Q Q属于终态。,DFA M=(S,U,V,Q,a,b,S,Q)其中定义为:(S,a)=U (V,a)=U (S,b)=V (V,b)=Q (U,a)=Q (Q,a)=Q (U,b)=V (Q,b)=Q,非确定的有穷自动机,一个非确定的有穷自动机(NFA)M是一个五元式: M=(S, , , s0, F)其中 S是一个有限集,它的每个元素称为一个状态。 是一个有穷字母表,它的每个元素称为一个输入字符 是一个从S*至S子集的单值映射。即:: S* 2S S0 S,是一个非空的

10、初态集 F S,是一个终态集(可空),非确定的有穷自动机例子,NFA N=(S,P,Z,0,1,S,P,Z)其中 (S,0)=P (S,1)=S,Z (P,1)=Z (Z,0)=P (Z,1)=P,简化为,非确定的有穷自动机,对于*中任何字,若存在一条从某一初态结点到某一个终态结点的通路,且这条通路上所有弧的标记字依序连接成的字(忽略那些标记为的弧)等于,则称可为NFA M所识别(读出或接受)。 若M的某些结点既是初态结点又是终态结点,或存在一条从某一初态结点到某一终态结点的通路,那么空字可为M所识别。,NFA的确定化,NFA的确定化,显然,DFA是NFA的特例,但是对于每个NFA M都存在一

11、个DFA M,使L(M)=L(M)。 定义对状态集合I的几个有关运算: 1 状态集合I的-闭包,表示为-closure(I),定义为一状态集,是状态集I中的任何状态s经任意条弧而能到达的状态的集合。状态集合I的任何状态s都属于-closure(I)。 2 状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可从I的某一状态经过一条a弧而到达的状态的全体。 定义Ia = -closure(move(I,a),-闭包的例子,I=1, -closure(I)=1,2; I=5, -closure(I)=5,6,2; move(1,2,a)=5,3,4 I=1,2, Ia=

12、-closure(5,3,4)=2,3,4,5,6,7,8;,1,2,5,3,4,a,a,a,NFA确定化的例子,i,1,2,1,2,3,1,2,3,1,2,4,1,2,3,5,6,f,1,2,4,1,2,3,Ib,Ia,1,2,4,S,A,B,1,2,3,5,6,f,A,B,C,C,A,1,2,4,5,6,f,D,1,2,4,5,6,f,D,1,2,3,5,6,f,1,2,4,6,f,1,2,3,6,f,1,2,4,5,6,f,C,E,1,2,4,6,f,E,F,1,2,3,6,f,F,D,1,2,3,6,f,F,1,2,4,5,6,f,D,1,2,3,5,6,f,C,1,2,4,6,f,E

13、,B,包含原初始状态i的状态子集为DFA的初态 包含原终止状态f的状态子集为DFA的终态,NFA的确定化,S,A,A,B,C,B,A,b,a,B,C,D,D,C,E,F,D,E,F,F,D,C,E,正规文法与有限自动机的等价性,对于正规文法G和有限自动机M,如果L(G)=L(M),则称G和M是等价的。关于正规文法和有限自动机的等价问题,有以下结论: 对每一个右线性正规文法G或左线性正规文法G,都存在一个正规自动机(FA)M,使得L(M)=L(G)。 对每一个FA M,都存在一个右线性正规文法GR和左线性正规文法GL,使得L(M)=L(GR)=( GL)。,正规文法与有限自动机的等价性,正规文法

14、 GR=其中P由以下产生式构成 A0|0B|1D B0D|1C C0|0B|1D D0D|1D,正规式和有限自动机的等价性,关于正规式与自动机的等价性,有如下性质: 对任何FA M,都存在一个正规式r,使得L(r)=L(M)。 对任何正规式r,都存在一个FA M,使得L(M)=L(r)。,正规式和有限自动机的等价性,对于简单的正规式: 对于正规式,所构造的NFA为:对于正规式,构造的NFA为:对于正规式a,a,构造的NFA为:,正规式和有限自动机的等价性,若s,t为上的正规式,相应的NFA分别为N(s)和N(t),则 对于正规式R=s | t,所构造的NFA(R)为:对于正规式R= st,构造

15、的NFA(R)为:对于正规式R=S*,构造的NFA(R)为:,DFA的最小化,DFA的最小化(DFA的化简) 一个有穷自动机通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有穷自动机。 最小状态DFA 没有多余状态(死状态) 没有两个状态是互相等价(不可区别) 两个状态s和t可区别:不满足 兼容性(一致性)同是终态或同是非终态 传播性(蔓延性)从状态s出发读入某个aa和从状态t出发读入某个a到达的状态等价。,DFA的最小化,算法的核心 把M的状态集K分成不相交的子集。 结论 接受L的最小状态有穷自动机不计同构是唯一的。 DFA M =(K,f, k0, kt),最小状态DFA M 1

16、.构造状态的初始划分:终态kt 和非终态K- kt两组 2.对施用传播性原则 构造新划分new 3. 如new =,则令 final= 并继续步骤4,否则:=new重复2 4.为final中的每一组选一代表,这些代表构成M的状态。若k是一代表且f(k,a)=t,令r是t组的代表,则M中有一转换f(k,a)=r M 的开始状态是含有K0的那组的代表 M的终态是含有Kt的那组的代表 5.去掉M中的死状态.,DFA的最小化,初始划分:一个由终态组成,一个由非终态组成 P0=(1,2,3,4,5,6,7),观察第一个子集,在读入a之后划分为P1=(1,2,3,4,5,6,7),观察第二个子集,在读入a之后划分为P1=(1,2,3,4,5,6,7),观察第四个子集,在读入a之后划分为P1=(1,2,3,4,5,6,7),Thanks for your time!Questions & Answers,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报