收藏 分享(赏)

编译原理 第03章 词法分析与有穷自动机.ppt

上传人:tkhy51908 文档编号:8023640 上传时间:2019-06-04 格式:PPT 页数:139 大小:1.78MB
下载 相关 举报
编译原理 第03章 词法分析与有穷自动机.ppt_第1页
第1页 / 共139页
编译原理 第03章 词法分析与有穷自动机.ppt_第2页
第2页 / 共139页
编译原理 第03章 词法分析与有穷自动机.ppt_第3页
第3页 / 共139页
编译原理 第03章 词法分析与有穷自动机.ppt_第4页
第4页 / 共139页
编译原理 第03章 词法分析与有穷自动机.ppt_第5页
第5页 / 共139页
点击查看更多>>
资源描述

1、第三章 词法分析与有穷自动机, 词法分析程序功能, 词法分析程序的编写方法, 正规文法与有穷自动机, 正规式与有穷自动机, 语言单词符号的两种定义方式, 单词符号及输出单词的形式,回顾:词法分析的任务,字符串 表示的 源程序,词 法 分 析 器,单词符号,取下一个 单词符号,语 法 分 析 器,3.1 词法分析程序的功能,3.2 单词符号及输出单词的形式,关键字 也称基本字,例如,C语言中的if,else,while, do等。,标识符 表示各种名字,如变量名、常量名、数组名和函数名等。,语言的单词符号是指语言中具有独立 意义的最小语法单位。,3.2 单词符号及输出单词的形式,常数 整型常数1

2、25、实型常数0.718、布尔型常数TRUE等 。,运算符 如、*、/、等。,分界符 如 ,、;、(、)、:等 。,3.2 单词符号及输出单词的形式,词法分析程序所输出的单词符号通常表示成如下的二元式:,(单词种别,单词自身的值),单词种别:单词的种类,3.2 单词符号及输出单词的形式,常数: 可统归为一种,也可按类型(整型、实型、布尔型等)划分。,关键字: 可全体视为一种,也可一字一种。,标识符: 一般统归为一种。,运算符和界符: 可一符一种类,也可统归为一种。,3.2 单词符号及输出单词的形式,单词自身的值,一个种别只含一个单词符号,一个种别含有多个单词符号,(1) 对于标识符其自身值是标

3、识符自身的字符串;,(2) 常数自身值是常数本身的二进制数值。,3.2 单词符号及输出单词的形式,(3) 用指向某类表格一个特定项目指针值来区分同类中不同的单词。,例如, 对于标识符用它在符号表的入口指针作为它自身值; 常数用它在常数表的入口指针作为它自身的值。,3.2 单词符号及输出单词的形式,常数自身的值用常数本身的值表示;,例如: if (a1) b =100;,假定:,关键字、运算符和界符都是一符一种;,标识符自身的值用自身的字符串表示;,3.2 单词符号及输出单词的形式,假设:标识符的种别编码为整数10 ;常数的种别编码为整数11 ;基本字if种别编码为2 ;赋值号的种别编码为17

4、;大于号的种别编码为23 ;分号的种别编码为26 ;左括号的种别编码为29 ;右括号的种别编码为30 ;则程序段 :,3.2 单词符号及输出单词的形式,if (a1) b =100;经词法分析后,输出的单词符号串是:,(2, ) 基本字if,(29, ) 左括号 (,(10,a) 标识符a,(23, ) 大于号 ,(11,1) 常数 1,(30, ) 右括号 ),(10,b) 标识符b,(17, ) 赋值号 =,(11,100)常数 100,(26, ) 分号 ;,3.3 单词符号的两种定义方式,正规式,以标识符为例:Il|Il|Id 或 Il|lTTl|d|lT|dT,以标识符为例:l (

5、l | d )*,正规文法,设有字母表=a1, a2, an ,在字母表上的正规式和它所表示的正规集(正规式描述的语言)用如下规则定义:,1. 是 上的正规式,它所表示的正规集是 ,即空集 。,2. 是 上的正规式,它所表示的正规集仅含一空符号串,即。,3. ai是上的一个正规式,它所表示的正规集是由单个符号ai 所组成,即ai。,3.3.1 正规式和正规集,4. 如果 e1和 e2 是上的正规式,它们所表示的正规集分别为 L(e1)和L(e2) ,则:,(1) e1 | e2是上的一个正规式,它所表示的正规集为L(e1 | e2)=L(e1 )L(e2),(2) e1.e2 也是上的一个正规

6、式,它所表示的正规集为L(e1.e2)=L(e1)L(e2),(3) (e1)*也是上的一个正规式,它所表示的正规集为L(e1)*)=(L(e1)*,3.3.1 正规式和正规集,3.3.1 正规式和正规集,运算符的优先级:闭包“*” 连接“” 或“|” 。连结符“”一般可省略不写。运算符均是左结合的。,3.3.1 正规式和正规集,例1 设有字母表=a,b ,有:,a 和 b是正规式,相应正规集为,2. a | b 是正规式,相应正规集为,3. ab 是正规式,相应正规集为,L(a)=a , L(b)=b,L(a | b )=L(a)L(b)=a ,b,L(ab)=L(a)L(b)=ab=ab,

7、3.3.1 正规式和正规集,4. (a | b)* 是正规式,相应正规集为,需要指出的是,a,b*的任一子集不一定是正规集。如:a ,b* 的子集 an bn | n1,L(a | b)*)= (L(a | b)*=a ,b*=, a, b, aa, ab, ba, bb, ,5. ba*是正规式,相应的正规集为,L(ba* )=L(b)L(a*)=b,ba,baa,baaa,(a | b)*(aa | bb) (a | b)* 是正规式,相应正规集为,即上所有含两个相继a或两个相继b组成的串。,L(a | b)*(aa | bb) (a | b)*)=L(a | b)*)L(aa | bb)

8、L(a | b)*)a,b*aa,bba,b*,3.3.1 正规式和正规集,3.3.1 正规式和正规集,例2 设=a,b,c,则 aa*bb*cc* 是上的一个正规式 , 它所表示的正规集:,L= abc, aabc, abbc, abcc, aaabc, ,= ambnck | m, n, k1,a+b+c+,3.3.1 正规式和正规集,例3 设程序语言字母表是键盘字符集合,则程序语言部分单词符号可用如下正规式定义:,关键字 if | else | while | do,标识符 l (l | d)* l代表az中任一字母,整常数 dd* d代表09中任一数字,关系运算符 =,3.3.1 正规

9、式和正规集,注意: 正规式与正规文法之间的区别和联系:,标识符 I = l (l | d)* l代表az中任一字母d代表09中任一数字,Il | Il | Id,3.3.1 正规式和正规集,如果正规式 R1 和 R2 描述的正规集相同, 则我们称正规式R1与R2等价。记为 R1R2。,例如,(a|b)*=(a*b*)* ;,3.3.1 正规式和正规集,正规式具有如下性质 :,1A | B = B | A (交换律),2A | ( B | C) = (A | B) | C (结合律),3A(BC) = (AB)C (结合律),4A(B | C) = AB | AC (分配律),5(A | B)C

10、 = AC | BC (分配律),6 A | A = A,7 A* = AA* | = A | A* = (A | )*,8 (A* )* = A*,令A , B 和 C 均为正规式,则,3.3.2 正规文法与正规式,1. 正规文法到正规式的转换,(1) 将正规文法中的每个非终结符表示成关于它的一个正规式方程,获得一个方程组。,(2) 依照求解规则:,若 X = X|(或 X =X + ) 则解为 X= *,若 X = X|(或 X =X + ) 则解为 X = *,以及正规式的分配律、交换律和结合律求关于文法开始符号的正规式方程组的解。,3.3.2 正规文法与正规式,例1 设有正规文法G:,

11、试给出该文法生成语言的正规式。,正规式方程组如下:,Z = 0A (1),A = 0A + 0B (2),B = 1A + (3),Z 0A,A 0A | 0B,B 1A | ,3.3.2 正规文法与正规式,将(3)代入(2)中的B得,A = 0A + 01A + 0 (4),对(4)利用分配律得,A = (0 + 01)A + 0 (5),即正规文法GZ所生成语言的正规式是,Z = 0A (1),A = 0A + 0B (2),B = 1A + (3),对(5)使用求解规则得,A = (0 + 01)* 0 (6),将(6)代入(1)式中的A,得,Z = 0 (0 + 01)* 0,R =

12、0 (0 | 01)* 0,X =X + , 则解为 X= *,3.3.2 正规文法与正规式,例2 设有正规文法G:,A aB | bB,B aC | a | b,C aB,试给出该文法生成语言的正规式。,正规式方程组如下:,A = aB + bB (1),B = aC + a + b (2),C = aB (3),3.3.2 正规文法与正规式,将(3)代入(2)中的C得,B = aaB + a + b (4),对(4)使用求解规则得,B = (aa)*(a + b) (5),(5)代入(1)中的B得,即正规文法GA所生成语言的正规式是,A = (a + b)(aa)*(a + b),R =

13、(a | b)(aa)*(a | b),A = aB + bB (1),B = aC + a + b (2),C = aB (3),X =X + , 则解为 X= *,3.3.2 正规文法与正规式,例3 设有正规文法G:,相应的正规式方程组为,Z U0 | V1,U Z1 | 1,V Z0 | 0,Z = U0 + V1 (1),U = Z1 + 1 (2),V = Z0 + 0 (3),3.3.2 正规文法与正规式,(2)和(3)代入(1)得,Z = Z10 + 10 + Z01 + 01 (4),对(4)使用求解规则得,即正规文法GZ所生成语言的正规式是,Z = U0 + V1 (1),U

14、 = Z1 + 1 (2),V = Z0 + 0 (3),Z = (10 + 01) (10 + 01 )*,R = (10 | 01)(10 | 01)*,X =X + , 则解为 X = *,3.3.2 正规文法与正规式,例4 已知描述 “标识符” 单词符号的正规文法为,lld,根据前述求解规则, 可知该文法所描述语言的正规式是 l ( l | d )*,3.3.2 正规文法与正规式,2. 正规式到正规文法的转换,(1) 令 VT= 。,(2) 对任何正规式R选择一个非终结符Z生成规则ZR并令SZ。,(3) 若a和b都是正规式,对形如 Aab 的规则转换成 AaB 和 Bb 两规则,其中B

15、是新增的非终结符。,3.3.2 正规文法与正规式,(4) 对已转换的文法中, 形如A a*b 的规则,进一步转换 成 A aA | b 。,(5) 不断利用规则(3)和(4)进行变换,直到每条规则最多含有一个终结符为止。,3.3.2 正规文法与正规式,例1 将 R=(a | b)(aa)*(a | b) 转换成相应的正规文法,令A是文法开始符号,根据规则(2)变换为,根据规则(3)变换为,A (a | b)(aa)*(a | b),A (a | b)B,B (aa)*(a | b),3.3.2 正规文法与正规式,对B根据规则(4)变换为,根据规则(3)变换为,即前面例2中的文法。,A aB |

16、 bB,B aaB | a | b,A aB | bB,B aC | a | b,C aB,A a*b,A aA | b,转换成,B (aa)*(a | b),3.3.2 正规文法与正规式,例2 将描述标识符的正规式 R=l ( l | d )* 转换成相应的正规文法,令I为文法的开始符号,根据规则(2)有,根据规则(3)变换为,根据规则(4)变换为,I l ( l | d )*,I lT,T ( l | d )*,I lT,T ( l | d )T | ,3.3.2 正规文法与正规式,进一步变换为,去掉 规则,即前面描述标识符的右线性文法。,I lT,T lT | dT | ,I l | l

17、T,T l | d | lT | dT,3.4 正规式与有穷自动机,有穷自动机是具有离散输入与输出系统的一种抽象数学模型。有穷自动机有“确定的”和“非确定的”两类,确定的有穷自动机和非确定的有穷自动机都能准确地识别正规集。,3.4.1 确定有穷自动机,确定有穷自动机(DFA),一个确定有穷自动机M是一个五元组,Q是一个有穷状态集合,每一个元素称为一个状态。,是一个有穷输入字母表,每个元素称为一个输入字符。,M=( Q, , f, S, Z ),表示当前状态为qi ,输入字符为a时,自动机将转换到下一个状态qj , qj 称为qi 的一个后继状态。,f 是一个从Q 到Q的单值映射:,M=( Q,

18、 , f, S, Z ),f ( qi , a) = qj (qi , qj Q, a ),3.4.1 确定有穷自动机,单值函数是指 f(q i, a) 唯一地确定了下一个要转移的状态。,S1,S2,S3,S4,a,b,c,3.4.1 确定有穷自动机,SQ ,是唯一的一个初态。,ZQ ,是一个终态集。,3.4.1 确定有穷自动机,M=( Q, , f, S, Z ),例 设DFA M=(q0 , q1 , q2,a, b, f , q0 ,q2),其中,状态转换矩阵,f ( q0 , a) = q1 f ( q0 , b) = q2,f ( q1 , a) = q1 f ( q1 , b) =

19、 q1,f ( q2 , a) = q2 f ( q2 , b) = q1,3.4.1 确定有穷自动机,一个 DFA也可以表示成一张状态转换图。,例中DFA M=(q0 , q1 , q2,a, b, f , q0 ,q2) 的状态转换图如下图所示。,q0,q1,b,b,b,a,a,a,3.4.1 确定有穷自动机,对符号串,若存在一条从初态结点到终态结点的道路, 在这条路上所有弧的标记连结成的符号串等于 , 则称为DFA M所识别(或接受)。M所识别的符号串的全体记为L(M) ,称为DFA M所识别的语言。,例中的DFA M所识别的语言为L(M) = ba*。,3.4.1 确定有穷自动机,3.

20、4.2 非确定有穷自动机,非确定有穷自动机(NFA),一个非确定有穷自动机M是一个五元组,其中:Q, , Z 意义同DFA ,f 和 S不同于DFA 。,M=( Q, , f, S, Z),(1) 状态转换函数f 是一个多值函数:f(qi ,a) =某些状态的集合,非确定的有穷自动机还 允许 f(qi ,)=某些状态的集合。,由图可知f( S1, a)=S1 , S2 , S3,(2) S Q ,是非空初态集。,S1,S2,S3,S4,a,a,c,a,3.4.2 非确定有穷自动机,其中,例 设有NFA M=(1,2,3,a,b,f,1,3,2),例中 NFA M对应的状态转换矩如下表所示。,f

21、 (1, a) = 3 f (1 , b) = 1,2,f (2, a) = f (2 , b) = 3,f (3, a) = f (3 , b) = 2,3.4.2 非确定有穷自动机,例中 NFA M 对应的状态转换图如下图所示。,3.4.2 非确定有穷自动机,其中,例 设有NFA M=(1,2,3,a,b,f,1,3,2),f (1, a) = 3 f (1 , b) = 1,2,f (2, a) = f (2 , b) = 3,f (3, a) = f (3 , b) = 2,例中NFA M 所识别的语言为,L(M) = b*(b|ab)(bb)*,3.4.2 非确定有穷自动机,例中 N

22、FA M ,对符号串 =bbb可由3条路来识别。,由NFA的定义可知,同一个符号串 可由多条路来识别。,第二条路:状态1状态1状态2;,第一条路:状态1状态2状态3状态2;,第三条路:状态3状态2状态3状态2;,b,b,3.4.2 非确定有穷自动机,DFA是NFA 的特例, 即对于每个NFA M 存在 DFA M ,使 L(M) = L(M)。因此,利用有穷自动机构造词法分析程序的方法: 从单词的描述中构造出NFA; 再将非确定的有穷自动机转化为确定的有穷自动机; 将其化简为状态最小化的DFA; 对DFA的每一个状态构造一小段程序将其转化为识别语言单词的词法分析程序。,3.4.2 非确定有穷自

23、动机,3.4.3 由正规式R构造NFA,输入:字母表上的正规式R,输出:识别(接受)语言L(R)的NFA M,引进初始结点X和终止结点Y,把R表示成拓广转换图,2. 用如下规则对R进行分裂和加进新结点, 直至每个边上只留下一个符号或 为止,方法:,R,3.4.3 由正规式R构造NFA,3. 分裂过程中, 所有新结点均采用不同的名字,保留X,Y为全图唯一初态结点和终态结点。,3.4.3 由正规式R构造NFA,例1 试构造识别标识符的NFA,描述标识符的正规式R= l ( l | d )*,首先将R表示成如下拓广转换图,X,Y,l (l | d)*,从左到右分裂R,X,2,Y,1,l,l,d,3.

24、4.3 由正规式构造NFA,例2 试构造识别语言R = (a | b)*abb 的NFA M, 使L(N)=L(R)。,首先将R表示成拓广转换图,从左到右分裂R,3.4.3 由正规式R构造NFA,例3 试构造正规式 R= 0 ( l* )* | 01 的NFA。,首先将R表示成如下拓广转换图,从左到右分裂R,首先利用正规式的等价性化简正规式, ( l* )*=1*, R=01* | 01=0 (1* | 1) =01*,( A* )*=A*,A | A*=A*,3.4.3 由正规式构造NFA,3.4.4 NFA确定化为DFA的方法,对于一个NFA,由于状态转换函数 f 是一个多值函数 ,因此,

25、对于它们有,基本思想:,f ( q, a)=q1 , q2 , q3,qn,也就是说,DFA的每一个状态代表NFA状态集合的某个子集,称此构造方法为子集法。,即是NFA状态集合的一个子集,为了将NFA转换为DFA,把状态集合q1 , q2 , q3, qn看作一个状态A。,输入:一个NFA M,输出:一个接受(识别)相同语言的DFA M,方法:利用构造闭包的方法将NFA确定化 为DFA。,1. 状态集合 I 的闭包的概念:,设I是NFA M的一个状态子集, closure(I)定义如下:,(1) 若sI , 则 s closure(I),(2) 若s closure(I) ,那么从s出发经过任

26、意条弧能到达的任何状态 s,都属于 closure(I),3.4.4 NFA确定化为DFA的方法,即 closure(I) 表示所有那些从I中的状态出发经过道路所能到达的NFA的状态所组成的集合, I中任何状态也在其中,因为它们是通过通路到达自身的。该集合对DFA来说是一个状态。,3.4.4 NFA确定化为DFA的方法, closure(0)=0,1,2,3,例:,这个状态集合实际就是要求的DFA的初态。,3.4.4 NFA确定化为DFA的方法,若令A=0,1,2,3,则,令B= closure(4,7)=4,5,6,7,8,9,B即是DFA在状态A下遇到输入符号b,转移到的后继状态。,J=f

27、(A,b)=f(0,b)f(1,b)f(2,b)f(3,b)=4,7,3.4.4 NFA确定化为DFA的方法,2. 从 NFA M 构造 DFA M 的算法,已知 NFA M=( Q, , f, x, y),求 DFA M=( I, , f , 初态, 终态集 ),开始令I= ,3.4.4 NFA确定化为DFA的方法,3.4.4 NFA确定化为DFA的方法,步骤一:由NFA构造一张表:(1)表的列数由中的字符数确定:列数=字符数+1 。第一列为I, 第二列、第三列为Ia,Ib,其中a,b为中的字符。(2)第一列第一行元素为: _CLOSURE(X),X为NFA的开始状态。(3)由(2)中的状态

28、出发,求Ia,Ib,其中Ia =_CLOSURE(J),J 表示(2)中的状态在读入a时转换成的状态集; Ib =_CLOSURE(J),J 表示(2)中的状态在读入b时转换成的状态集;。,3.4.4 NFA确定化为DFA的方法,(4)检查Ia,Ib 是否在第一列出现过,把凡是未出现过的都填入空行的第一列,并求出相应的Ia,Ib,直到所有Ia,Ib都在第一列出现为止。步骤二:由上表构造DFA:表中第一列第一行元素为DFA开始状态,含有原NFA终态的集合为DFA的终止状态。,求DFA M的初态CLOSURE(x),并置为无标记送入I;,while ( I中存在一个无标记的状态 T= s1, s2

29、, s3, , sn ), 标记T;,for ( 每个输入符号a ), J = f (s1, s2, s3, , sn,a ),U = CLOSURE( J );,if (U不在I中 ,if (U不为空) 置MT, a =U;,if (U中至少有一个是N的终态) U为M的终态;,/* 求 f ( T, a )=U */,= f ( s1, a )f ( s2 , a ) f ( sn, a );,3.4.4 NFA确定化为DFA的方法,例1 将下图所示的NFA N确定化。,DFA的开始状态为: A=CLOSURE(X)=X, 0, 1,Ib, X, 0, 1 ,Ia,A,I,a,X,1,2,Y

30、,3,b,b,a,0,b,3.4.4 NFA确定化为DFA的方法,I=A,(1),f(A,a)= CLOSURE(f(X,0,1,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,a,X,1,2,Y,3,b,b,a,0,b,3.4.4 NFA确定化为DFA的方法,I=A,f(A,b)= CLOSURE(f(X,0,1,b) =CLOSURE( 0) =0,1=C,f(A,a)= CLOSURE(f(X,0,1,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,a,3.4.4 NFA确定化为DFA的方法,

31、I=A,B,C,f(A,b)= CLOSURE(f(X,0,1,b) =CLOSURE( 0) =0,1=C, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C,f(B,a)= CLOSURE(f(0,1,2,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,3.4.4 NFA确定化为DFA的方法,I=A,B,C,f(B,b)= CLOSURE(f(0,1,2,b) =CLOSURE( 0,3) =0,1,3=D, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C,(2)在I中取B,f(B,a)= CLOSURE(f(0,1

32、,2,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,3.4.4 NFA确定化为DFA的方法,I=A,B,C,D,f(B,b)= CLOSURE(f(0,1,2,b) =CLOSURE( 0,3) =0,1,3=D, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C, 0,1,2 , 0,1,3 , 0,1,3 ,D,f(C,a)= CLOSURE(f(0,1,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,a,X,1,2,Y,3,b,b,a,0,b,3.4.4 NFA确定化为DFA的方

33、法,I=A,B,C,D,f(C,b)= CLOSURE(f(0,1,b) =CLOSURE( 0) =0,1=C, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C, 0,1,2 , 0,1,3 , 0,1,3 ,D,f(C,a)= CLOSURE(f(0,1,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,3.4.4 NFA确定化为DFA的方法,I=A,B,C,D,f(C,b)= CLOSURE(f(0,1,b) =CLOSURE( 0) =0,1=C, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C,(3)在I中取C

34、, 0,1,2 , 0,1,3 , 0,1,3 ,D, 0,1,2 , 0,1 ,f(D,a)= CLOSURE(f(0,1,3,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,3.4.4 NFA确定化为DFA的方法,I=A,B,C,D,f(D,b)= CLOSURE(f(0,1,3,b) =CLOSURE( 0,Y) =0,1,Y=E, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C, 0,1,2 , 0,1,3 , 0,1,3 ,D, 0,1,2 , 0,1 ,f(D,a)= CLOSURE(f(0,1,3,a) =CLOSUR

35、E( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,3.4.4 NFA确定化为DFA的方法,I=A,B,C,D,E,f(D,b)= CLOSURE(f(0,1,3,b) =CLOSURE( 0,Y) =0,1,Y=E, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C, 0,1,2 , 0,1,3 , 0,1,3 ,D, 0,1,2 , 0,1 , 0,1,Y ,E, 0,1,2 , 0,1,Y ,f(E,a)= CLOSURE(f(0,1,Y,a) =CLOSURE( 0, 2) =0,1,2=B,Ib, X, 0, 1 ,Ia,A,I,a,X,1,2,Y

36、,3,b,b,a,0,b,3.4.4 NFA确定化为DFA的方法,I=A,B,C,D,E,f(E,b)= CLOSURE(f(0,1,Y,b) =CLOSURE( 0) =0,1=C, 0,1,2 , 0,1 , 0,1,2 , 0,1 ,B,C, 0,1,2 , 0,1,3 , 0,1,3 ,D, 0,1,2 , 0,1 , 0,1,Y ,E, 0,1,2 , 0,1,Y ,未增加新的状态,且已无其它状态可处理, 0,1,2 , 0,1 ,例2 将下面的NFA N确定化。,首先确定其初态 ,命名为0状态,I,Id,Il,X,1,2,Y,1,2,Y,2,Y,2,Y,2,Y,2,Y,2,Y,0,

37、2,1,0 =CLOSURE(X)=X,3.4.4 NFA确定化为DFA的方法,d,1,3.4.4 NFA确定化为DFA的方法,例3 将下面的NFA N确定化。,首先确定其初态 ,命名为0状态,I,1,0,X,1,2,Y,1,2,Y,2,Y,2,Y,2,Y,0,2,1,0 =CLOSURE(X)=X,3.4.4 NFA确定化为DFA的方法,3.4.5 DFA的化简,1. DFA的化简,所谓一个DFA M 的化简是指寻找一个状态数比 M 少的 DFA M ,使得 L(M)=L(M) 。,(1) 没有多余状态。,化简了的DFA满足两个条件:,(2) 它的状态集中没有两个状态是互相等价的。,所谓有穷

38、自动机的多余状态是指从该自动机的开始状态出发,任何输入串不能到达的状态。,3.4.5 DFA的化简,2. 多余状态,3.等价状态,设 DFA M(Q,f, S0, Z), s, t Q ,若对任何 *, f (s , )Z 当且仅当 f (t , )Z ,则称状态 s 和 t 是等价的。,例如,终态与非终态是可区别的。因为终态有一条到达自身的道路,而非终态没有到达终态的道路。,3.4.5 DFA的化简,如果 s 和 t 不等价, 则称 s 和 t 是可区别的。,5.化简方法,一致性条件: 状态s和t必须同时为终态或非终态。,4.两个状态等价的条件:,蔓延性条件: 对于所有输入符号a,状态 s

39、和 t 必须转到等价的状态里。,输入:一个DFA M 。,输出:接受与M相同语言的DFA M ,且其状态数最少。,3.4.5 DFA的化简,无多余状态下把M的状态集 Q划分成一些不相交的子集,使得每个子集中任何两个状态是等价的,而任何两个属于不同子集的状态都是可区别的。,化简方法:,然后在每个子集中任取一个状态作“代表”, 而删去子集中其余状态, 并把指向其余状态的箭弧都改作指向作“代表”的状态中。,3.4.5 DFA的化简,A,F,G,I,L,M,W,Z,E,H,K,O,R,T,X,A,M,W,H,T,下面给出化简算法的具体执行步骤:,1. 将DFA M的状态集Q分成两个子集:终态集F和非终

40、态集F,形成初始划分。,2. 对使用如下方法建立新划分NEW:,(1) 把G划分成新的子集,使得G的两个状态s和t属于同一子集,当且仅当对任何输入符号a ,状态s和t转换到的状态都属于的同一子集。,对的每个状态子集G:,3.4.5 DFA的化简,用G划分出的所有新子集替换G, 形成新的划分NEW;,如果NEW,则执行第4步;否则令 NEW,重复第2步。,划分结束后,对划分中的每个状态子集,选出一个状态作代表,而删去其它一切等价的状态,并把指向其它状态的箭弧改为指向这个作为代表的状态。,3.4.5 DFA的化简,例1. 将右面的DFA M最小化,1,2l =2,=(1,20),分析 由图可知,给

41、定的DFA无多余状态。,初始分划=(1,20),1,2d =2,3.4.5 DFA的化简,例2. 将右面的DFA最小化,初始分划=(A,B,C,DE),A,B,C,Da=B,分析 由图可知,给定的DFA中无多余状态。,A,B,C,Db=C,D,E,=(A,B,CDE),A,B,Ca=B,A,B,Cb=C,D,=(A,CBDE),A,Ca=B,A,Cb=C,=(A,CBDE),a,3.4.6 有穷自动机到正规式的转换,1. 在 M 的转换图上添加两个结点: X 结和Y结。从X结点用连线连结到M的所有初态结点,从 M 的所有终态结点用连线连结到 Y 结。,3.4.6 有穷自动机到正规式的转换,2.

42、 逐步消去M中的其它结点,直至只剩下X,Y结点。在消除结点过程中,逐步用正规式来标记相应的箭弧。,3.4.6 有穷自动机到正规式的转换,对于,代换为,对于,代换为,代换为,对于,3.4.6 有穷自动机到正规式的转换,例1. 给出如下有穷自动机的正规式,R=(10|01)(10|01)*,3.5 正规文法与有穷自动机,前面提到程序设计语言的单词符号可用乔母斯基3型文法正规文法来描述 对于正规文法所描述的语言可用一种有穷自动机来识别,3.5 正规文法与有穷自动机,右线性正规文法到有穷自动机的转换方法,则相应的有穷自穷自动机M = (Q , , f , q0 , Z ),1. 令 Q= VND (D

43、 VN) Z=D = VT q0=S,2. 对G中每一形如AaB (A ,BVN ,aVT)的产生式 , 令 f (A , a)=B,设给定了一个右线性正规文法G = (VN ,VT , P , S),a= AB 令f (A , )=B,AaB Aa,3.5.1 右线性正规文法到有穷自动 机的转换方法,3. 对G中每一形如Aa(AVN ,aVT)的产生式, 令 f (A , a)=D,4. 对G中每一形如A (AVN )的产生式, 令A为接受状态或令 f (A , )=D,例1 构造下述文法GZ的有穷自动机。,Z0A,A0A | 0B,B1A | ,M = (Q , , f , q0 , Z

44、),G = (VN ,VT , P , S),M=(VN D, VT ,f, Z, D),M=( Z,A,B,D, 0,1),f, Z, D),f =? 根据规则来确定,f(Z,0)=A f(Z,1)= f(z, )= f(A,0)=A,B f(A,1)= f(A, )= f(B,0)= f(B,1)=A f(B, )=D,Z0A,A0A | 0B,B1A | ,AaB (A ,BVN ,aVT),令 f (A , a)=B,Aa(AVN ,aVT), 令 f (A , a)=D,A (AVN ), 令A为接受状态或令 f (A , )=D,3.5.2 左线性正规文法到有穷自动 机的转换方法,则相应的有穷自穷自动机M = (Q , , f , q0 , Z ),1. 令 Q= VNq0 (q0 VN) Z=S = VT,2. 对G中每一形如ABa (A ,BVN ,aVT)的产生式, 令 f (B , a)=A,设给定了一个左线性正规文法G = (VN ,VT , P , S),a= AB 令f (B , )=A,ABa Aa,3.5.2 左线性正规文法到有穷自动 机的转换方法,3. 对G中每一形如 Aa (AVN, aVT)的产生式, 令 f (q0 , a) =A,例1. 构造下述文法GA的自动机。,其状态图如下图所示。,

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

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

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


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

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

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