词法分析(6学时)调整版.ppt
《词法分析(6学时)调整版.ppt》由会员分享,可在线阅读,更多相关《词法分析(6学时)调整版.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 词法分析词法分析正规式正规式NFANFA正规文法正规文法DFADFA最小化最小化DFADFA子集法子集法语言语言消除多余状态消除多余状态合并等价状态合并等价状态n有穷自动机有穷自动机 FAFA:是一个识别装置,用于识别是一个识别装置,用于识别“所有句子所有句子”。n引入引入FAFA的目的:的目的:为词法分析程序的自动构造寻找特殊的方法和工具为词法分析程序的自动构造寻找特殊的方法和工具n类型:类型:确定的有穷自动机确定的有穷自动机 DFADFA不确定的有穷自动机不确定的有穷自动机 NFANFA返回返回4.1 有穷自动机(有穷自动机(FA,Finite Automata)nFA(Fi
2、nite AutoMata)FA(Finite AutoMata):是一个识别装置,用于识别是一个识别装置,用于识别“所有句子所有句子”。n引入引入FAFA的目的:的目的:为词法分析程序的自动构造寻找特殊的方法和工具为词法分析程序的自动构造寻找特殊的方法和工具n类型:类型:确定的确定的有穷自动机有穷自动机 DFADFA不确定的有穷自动机不确定的有穷自动机 NFANFAnNFA NFA DFA DFA(子集法)子集法)nDFADFA的化简的化简(最小化最小化 DFADFA)下一节下一节确定的有穷自动机确定的有穷自动机(DFA)DFA)1.1.定义:定义:一个一个DFADFA是一个五元组是一个五元
3、组 M=(K,M=(K,f,S,Z ,f,S,Z)K K:有穷的状态集有穷的状态集 :有穷的字母表(即输入字符的集合)有穷的字母表(即输入字符的集合)f f:转换函数转换函数 K K K K 上的映像上的映像 S S:初态(初态唯一)初态(初态唯一)Z Z:终态终态集集(终态不唯一)(终态不唯一)例:例:DFA M=(S,U,V,Q,a,b,f,S,Q)DFA M=(S,U,V,Q,a,b,f,S,Q)f f:f(S,a)=Uf(S,a)=Uf(S,b)=Vf(S,b)=Vf(U,a)=Qf(U,a)=Qf(U,b)=Vf(U,b)=Vf(V,a)=Uf(V,a)=Uf(V,b)=Qf(V,b
4、)=Qf(Q,a)=Qf(Q,a)=Qf(Q,b)=Qf(Q,b)=Q确定的有穷自动机确定的有穷自动机(DFA)DFA)2.2.DFADFA的的“直观直观”表示:表示:1)1)状态图(状态转换图)状态图(状态转换图)每个状态用结点表示每个状态用结点表示若若f(f(KiKi,a)=,a)=KjKj,则则初态用初态用“=”“=”或或“-”“-”标出标出终态用双圈终态用双圈 或或“+”“+”标出标出2)2)矩阵矩阵列标题:输出符号(列标题:输出符号(VTVT)行标题:状态行标题:状态若若f(f(KiKi,a)=,a)=KjKj,则则KiKi和和a a的交汇处是的交汇处是 KjKj初态用初态用“=”“
5、=”标出标出 或或 默认第一行(表格左端)默认第一行(表格左端)终态用终态用“1”“1”标出(表格右端)标出(表格右端)非终态用非终态用“0”“0”标出(表格右端)标出(表格右端)KiKja例:参见上例的例:参见上例的DFADFA,分别用状态图和矩阵表示。分别用状态图和矩阵表示。确定的有穷自动机确定的有穷自动机(DFA)DFA)3.3.DFADFA可以接受的可以接受的句子句子句子句子(符号串符号串符号串符号串):):若若tt*,且存在且存在f(S,t)=Pf(S,t)=P,P P终态集,终态集,则则t t为该为该DFADFA可以接受的句子。可以接受的句子。即:从初态即:从初态S S到某终态结点
6、到某终态结点P P的道路上,所有弧上的的道路上,所有弧上的标记符连接而成字符串标记符连接而成字符串t t,t t为该为该DFADFA可以接受的可以接受的句子。句子。例:参见上例的例:参见上例的DFADFA状态图,判断下列句子能否被接受:状态图,判断下列句子能否被接受:abbaabbabaabbaababbabbaaaaa aDFA M DFA M 能够接受的句子的全体记为能够接受的句子的全体记为 L(M)!L(M)!确定的有穷自动机确定的有穷自动机(DFA)DFA)4.4.DFADFA的确定性:的确定性:f:f:K K K K 是一个单值函数是一个单值函数即即 对任何状态对任何状态K K,当输
7、入字符当输入字符a a时,下一状态唯一。时,下一状态唯一。上例的有穷状态机就是上例的有穷状态机就是DFADFADFA M=DFA M=(K K,f f,S S,Z Z)的行为模拟程序:的行为模拟程序:K:=SK:=S;c:=getchar;c:=getchar;while(ceof)while(ceof)K:=f(K,c);K:=f(K,c);c:=getchar;c:=getchar;if(K in Z)if(K in Z)return(yes);return(yes);elseelse return(no);return(no);DFADFA的行为模拟程序的行为模拟程序返回示例:一个识别标
8、识符的确定的有穷状态机12字母其它字母数字字母3其它数字数字或其它n最小化DFA没有多余状态(死状态)没有两个状态是互相等价DFADFA的化简(最小化的化简(最小化DFADFA)(1)多余状态:)多余状态:从开始状态出发,任何输入串也不能到达的状态从开始状态出发,任何输入串也不能到达的状态处理:处理:消除多余状态消除多余状态消除多余状态消除多余状态(2)两个状态)两个状态s和和t等价:满足等价:满足一致性一致性同是终态同是终态 或或 同是非终态同是非终态蔓延性蔓延性从从s s出发读入某个出发读入某个a a a a和从和从 t t 出出发发读入某个读入某个a a到达的状态等价。到达的状态等价。处
9、理:处理:合并等价状态合并等价状态合并等价状态合并等价状态(使用(使用“分割法分割法”)s1 s5s2 s7s2 s5s5 s7s5 s6s3 s1s8 s0s0 s1s3 s60 1011000110s0s1s2s3s4s5s6s7s8s1 s5s2 s7s2 s5s5 s7s3 s1s0 s10 1011001s0s1s2s3s5s7DFADFA的化简(最小化的化简(最小化DFADFA)举例:消除多余状态举例:消除多余状态解:解:步骤一:消除多余状态步骤一:消除多余状态步骤二:使用分割法,合并等价状态。步骤二:使用分割法,合并等价状态。b02134abaaaabbbDFA M举例:求最小化
10、举例:求最小化DFADFADFADFA的化简(最小化的化简(最小化DFADFA)1,2,3,4,5,6,7Ia:6,7,1,4,7,4,4Ib:3,3,5,6,3,1,21,2,3,4 5,6,71,2 3,4 5 6,71,2 3 4 5 6,71352746aaaaaaabbbbbbb13546aaaaabbbbb举例:求最小化DFA返回P70 P70 例例2 2课后题:课后题:4(4(b)9b)9不确定的有穷自动机不确定的有穷自动机(NFA)NFA)1.1.定义:定义:一个一个NFANFA是一个五元组是一个五元组 M=(K,M=(K,f,S,Z ,f,S,Z)K K:有穷的状态集有穷的状
11、态集 :有穷的字母表(即输入字符的集合)有穷的字母表(即输入字符的集合)f f:转换函数转换函数 K K*K K+上的映像上的映像(K K+表示表示K K的子集的子集)S S:初态集初态集(初态不唯一初态不唯一)Z Z:终态集终态集例:例:NFA M=(NFA M=(0,1,2,3,40,1,2,3,4,a,ba,b,f,f,0 0,2,42,4)f f:f(0,a)=0,3f(0,a)=0,3f(0,b)=0,1f(0,b)=0,1f(1,b)=2f(1,b)=2f(2,a)=2f(2,a)=2f(2,b)=2f(2,b)=2f(3,a)=4f(3,a)=4f(4,a)=4f(4,a)=4f
12、(4,b)=4f(4,b)=42.2.NFANFA的的“直观直观”表示:表示:1)1)状态图(状态转换图)状态图(状态转换图)每个状态用结点表示每个状态用结点表示若若f(f(KiKi,a)=,a)=KjKj,则则初态用初态用“=”“=”或或“-”“-”标出标出终态用双圈终态用双圈 或或“+”“+”标出标出2)2)矩阵矩阵列标题:输出符号(列标题:输出符号(VTVT)行标题:状态行标题:状态若若f(f(KiKi,a)=,a)=KjKj,则则KiKi和和a a的交汇处是的交汇处是 KjKj初态用初态用“=”“=”标出标出 或或 默认第一行(表格左端默认第一行(表格左端)终态用终态用“1”“1”标出
13、(表格右端)标出(表格右端)非终态用非终态用“0”“0”标出(表格右端)标出(表格右端)KiKja举例:参见上例的举例:参见上例的NFANFA,分别用状态图和矩阵表示。分别用状态图和矩阵表示。不确定的有穷自动机不确定的有穷自动机(NFA)NFA)3.3.NFANFA可以接受的可以接受的句子句子句子句子(符号串符号串符号串符号串):):(同同DFA)DFA)若若tt*,且存在且存在f(S,t)=Pf(S,t)=P,P P终态集,终态集,则则t t为该为该NFANFA可以接受的句子。可以接受的句子。例:参见上例的例:参见上例的NFANFA状态图,判断下列句子能否被接受:状态图,判断下列句子能否被接
14、受:aaaaaabaabbaababbabba aabaabababbabNFA M NFA M 能够接受的句子的全体记为能够接受的句子的全体记为 L(M)L(M)对于每个对于每个NFA M NFA M 存在一个存在一个DFA MDFA M,使得使得L(M)=L(M)L(M)=L(M)!不确定的有穷自动机不确定的有穷自动机(NFA)NFA)可以被可以被 NFA M NFA M 能够接受的两种情况:能够接受的两种情况:MM的某结点既是初态,又是终态的某结点既是初态,又是终态 存在一条从初态到终态的存在一条从初态到终态的 道路道路4.4.NFANFA的不确定性:的不确定性:对于状态对于状态K K,
15、当输入字符当输入字符a a时,下一状态不一定唯一。时,下一状态不一定唯一。5.NFA5.NFA的确定化:的确定化:对每个对每个NFA M NFA M 一定存在一定存在一个一个DFA MDFA M,使得,使得L(M)=L(M)L(M)=L(M)即:对每个即:对每个NFA MNFA M存在着与之存在着与之等价等价的的DFA M DFA M。注:与某一注:与某一NFANFA等价的等价的DFADFA不唯一。不唯一。不确定的有穷自动机不确定的有穷自动机(NFA)NFA)返回NFANFADFADFA(子集法)(子集法)(一)基本运算:(一)基本运算:n n状态集合状态集合状态集合状态集合I I I I的的
16、的的 闭包闭包闭包闭包:表示为:表示为 -closure(I)closure(I)closure(I)closure(I)状态集状态集I I中的任何状态中的任何状态S S经任意条经任意条 弧而能到达的弧而能到达的状态状态状态状态的集合的集合的集合的集合。注:状态集注:状态集I I的任何状态的任何状态S S都属于都属于-closure(I)closure(I)n n状态集合状态集合状态集合状态集合I I I I的的的的a a a a弧转换弧转换弧转换弧转换:表示为:表示为move(I,a)move(I,a)move(I,a)move(I,a)定义为状态集合定义为状态集合J J,其中其中J J是所
17、有那些可从是所有那些可从I I的某一状的某一状态经过一条态经过一条a a弧而到达的状态的全体。弧而到达的状态的全体。定义定义 Ia=Ia=-closure(J)closure(J)举例:参见举例:参见P58 P58 图图4.44.4,求:,求:-closure(0)closure(0)closure(0)closure(0)move(0,a)move(0,a)move(0,a)move(0,a)move(0,b)move(0,b)move(0,b)move(0,b)-closure(1)closure(1)closure(1)closure(1)move(2,a)move(2,a)move(2
18、,a)move(2,a)move(2,b)move(2,b)move(2,b)move(2,b)move(0,1,2,4,7,a)move(0,1,2,4,7,a)move(0,1,2,4,7,a)move(0,1,2,4,7,a)-closure(1,3)closure(1,3)closure(1,3)closure(1,3)move(0,1,2,4,7,b)move(0,1,2,4,7,b)move(0,1,2,4,7,b)move(0,1,2,4,7,b)NFANFADFADFA(子集法)(子集法)(二(二)转换的主要思想:转换的主要思想:DFADFADFADFA的的的的一个一个一个一个
19、状态可能对应状态可能对应状态可能对应状态可能对应NFANFANFANFA的的的的一个或一组一个或一组一个或一组一个或一组状态状态状态状态 DFADFADFADFA同样同样同样同样记录记录记录记录在在在在NFANFANFANFA上上上上读入某个读入某个读入某个读入某个VTVTVTVT后可能到达的所后可能到达的所后可能到达的所后可能到达的所有状态有状态有状态有状态(三)子集法(三)子集法NFA NFA NFA NFA N N N N=(K,=(K,=(K,=(K,f,K,f,K,f,K,f,K0 0 0 0,K,K,K,Kt t t t)构造构造构造构造 DFA DFA DFA DFA M M M
20、 M=(S,=(S,=(S,=(S,d,S,d,S,d,S,d,S0 0 0 0,S,S,S,St t t t),使得使得使得使得 L(M)=L(N)L(M)=L(N)L(M)=L(N)L(M)=L(N):1.1.1.1.M M M M的状态集的状态集的状态集的状态集S S S S由由由由K K K K的一些子集组成的一些子集组成的一些子集组成的一些子集组成2.2.2.2.M M M M和和和和N N N N的的的的输入字母表相同输入字母表相同输入字母表相同输入字母表相同3.3.3.3.转换函数转换函数转换函数转换函数d d d d是这样定义的:是这样定义的:是这样定义的:是这样定义的:4.4
21、.4.4.d(d(d(d(S S S S1 1 1 1,.,.,.,.,S S S Sj j j j,a)=a)=a)=a)=-closure(moveclosure(moveclosure(moveclosure(move(S S S S1 1 1 1,.,.,.,.,S S S Sj j j j,a)a)a)a)4.4.4.4.S S S S0 0 0 0=-closure(Kclosure(Kclosure(Kclosure(K0 0 0 0)为为为为M M M M的开始状态的开始状态的开始状态的开始状态5.5.5.5.S S S St t t t=S S S Si i i i,S S
22、S Sk k k k ,.,S,.,S,.,S,.,Se e e e ,其中,其中,其中,其中 S S S Si i i i,S S S Sk k k k ,.,S,.,S,.,S,.,Se e e e S S S S6.6.6.6.且且且且 S S S Si i i i,S S S Sk k k k,.,.,.,.S S S Se e e e K K K Kt t t t NFANFADFADFA(子集法)(子集法)构造构造构造构造 NFA N NFA N NFA N NFA N 的状态的状态的状态的状态 K K K K 的子集的算法的子集的算法的子集的算法的子集的算法:假定所构造的子集族为
23、假定所构造的子集族为 C=(TC=(T1 1,T,T2,2,.,.T Ti i),其中其中T T1 1,T,T2,2,.,.T Ti i为状态为状态 K K 的子集。的子集。1 1)开始,令)开始,令-closure(Kclosure(K0 0)为为C C中唯一成员,并且它是未中唯一成员,并且它是未被标记的。被标记的。2 2)While(CWhile(C中存在尚未被标记的子集中存在尚未被标记的子集T)doT)do 标记标记T T;for(for(每个输入字母每个输入字母a)doa)do U:=U:=-closure(move(T,a)closure(move(T,a);ifif(U U不在不在
24、C C中)中)thenthen 将将U U作为未标记的子集加在作为未标记的子集加在C C中;中;举例:参见举例:参见举例:参见举例:参见P58 P58 P58 P58 图图图图4.4 4.4 4.4 4.4 构造构造构造构造NFANFANFANFA对应的子集对应的子集对应的子集对应的子集NFANFADFADFA(子集法)(子集法)-closure(move(Ti,a)-closure(move(Ti,b)T0=-closure(0)=0,1,2,4,7 T1=1,2,3,4,6,7,8 T2=1,2,4,5,6,7 T1=1,2,3,4,6,7,8 T1=1,2,3,4,6,7,8 T3=1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 学时 调整
限制150内