有穷自动机的最小化c语言代码,第03章 词法分析与有穷自动机(2).ppt

《第03章 词法分析与有穷自动机(2).ppt》由会员分享,可在线阅读,更多相关《第03章 词法分析与有穷自动机(2).ppt(59页珍藏版)》请在人人文库网上搜索。

1、3 . 4 . 5 DFA的简化,1。DFA的简化。一个有限状态机的简化是指找到一个状态数少于M的有限状态机,这样L(M)=L(M)。(1)没有多余的状态。简化的DFA满足两个条件:(2)在其状态集中没有两个状态是彼此等价的。有限自动机的冗余状态是指任何输入串都不能从自动机的起始状态到达的状态。3 . 4 . 5 DFA的简化,2。冗余状态,3。等价态,设DFA m (q,f,s0,Z),s,t q,当且仅当f (t),Z是任意*,f (s),Z,那么态s和t是等价的。例如,最终状态与非最终状态是不同的。因为最终状态有一个到达自身的方式,而不是最终状态没有到达最终状态的方式。3.4.5财务分析。

2、的简化。如果S和T不相等,那么S和T是可区分的。5。简化方法,一致性条件:状态S和T必须都是最终或非最终的。4。两个状态相等的条件:和扩展条件:对于所有输入符号A,状态S和T必须变成相等的状态。输出:接受与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。

3、,T,X,A,M,W,H,T,简化算法的具体执行步骤如下。1.DFA M的状态是2。用下面的方法建立一个新的划分:(1)把G分成新的子集,这样G的两个状态S和T属于同一个子集,当且仅当对于任何输入符号A,状态S和T转变到的状态属于同一个子集。简化每个状态子集g:和3.4.5dfa,用g除的所有新子集替换g,并形成新的分区新;如果是新的,执行步骤4;否则,创建新的,并重复步骤2。分割后,对于分割中的每个状态子集,选择一个状态作为代表,删除所有其他等效状态,并将指向其他状态的箭头弧更改为指向该代表状态。3 . 4 . 5 DFA的简化,示例1。最小化右边的DFA,初始分区=(A,B,C,DE),A。

4、,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,=,初始分割=(1,20),1,2d=2,3.4.5 DFA简化,3.4.6从有限自动机到范式的转换,1。在m的变换图上增加两个节点:X节点和Y节点,X节点通过导线连接到m的所有初始节点,m的所有最终节点通过导线连接到Y节点,从而形成一个新的不确定有限自动机m,它只有一个初始节点X和一个最终节点Y.显然,左(中)=左(中)。也就是说,这两个NFA是等效的。3.4.6从有限自动机到范式的转换,2。逐渐。

5、消除m中的其他节点,直到只剩下x和y节点。在消除节点的过程中,相应的箭头弧逐渐被标上正规表达式。消除节点的过程非常直观,只需重复使用下面显示的替换规则。3.4.6从有限自动机到范式的转换,例如1。图中显示了带有有限自动机的状态图,试图找到该自动机所识别的语言的范式。,R=(10|01)(10|01)*,3.5正常语法和有限自动机,上述编程语言的单词符号可以用乔姆斯基类型3语法来描述,而正常语法所描述的语言可以用有限自动机来识别。给出了左线性正规文法/右线性正规文法、3.5正规文法和有限自动机的相应有限自动机的构造方法,在从右线性正规文法到有限自动机的变换方法中,相应的有限自有限自动机M=(Q,。

6、f,q0,Z),1。让Q=VND (D VN) Z=D=VT q0=S,2。对于G中的每个形式AaB (A,BVN,aVT),让f给定一个右线性正规文法,G=(VN,VT,P,S),a=AB,让f (A),=B,AaB Aa,3.5.1。从右线性正规文法到有限自动机的转换方法,3。对于G,Z0A,A0A | 0B,B1A |,M=(Q,f,q0,Z),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 (b,0)=f (b,1)。

7、=a f()。AVT),让f (A,a)=D,A (AVN),让A被接受,或者让f (A,=D,3.5.2把左线性正规文法变换成有限自动机,然后相应的有限自穷自动机M=(Q,f,q0,Z),1 2。设f (B,a)=A,给出左线性正规文法G=(VN,VT,P,S),a=AB,设f (B),A=AbA,Aa,3.5.2为左线性。其状态图如下图所示。显然,自动机是决定性的。它识别的语言是语法遗传算法描述的语言。也就是说,l (ga)=l (m)=00 * 11 *,bb0 | 0,aa1 | B1,3.5.3从有限自动机到正常语法的转换。给定有限自动机M=(Q,F,q0,Z),相应的正规文法G=(。

8、VN,VT,P,S),1,3.5.3从有限自动机到正规文法的变换,如果文法的开始符号S是一个最终状态,那么乘积S被加到P上。例1有一个有限自动机m=(s,A,A,B,0,1,F,S,A),图中示出了M的状态转移图。根据上述转换规则,等价于M的正常语法G是:其中,P:自动机M识别的语言是L(M)=L(G)=(a|b)(0|1|a|b)*。f (s,a)=a f (s,b)=a,f (a,a)=a f (a,b)=a,f (a,0)=a f (a,1)=a,其中g=(s,a,a,b,b),构造一个右线性文法G,使L(G)=L(M)。(a,0)=b (a,1)=d,(b,0)=d (b,1)=c,(。

9、c,0)=b (c,1)=d,其中:3.5.3从有限自动机到正常语法的转换,3.5.3从有限自动机到正常语法的转换,G=(A,B,C,0,1,P,A),其中P是,或,并且自动机识别的语言是0(10)*。A0B | 0,B1C,C0B | 0。根据转换规则,正确的线性语法是,A0B,B1C |,C0B,C,A,0,0,1,3.6。词法分析器的编写方法,构造词法分析器3360的方法,第二种方法是利用词法分析器的自动生成工具lex自动生成词法分析器,第一种方法以一个简单的语言为例简要介绍第一种方法。例如,下表列出了一种简单语言的所有单词符号,以及它们的种类代码和单词值。右边的图片是识别前面表格中单词。

10、符号的状态转换图。在图中,状态0是初始状态,那些有双循环的是最终状态;状态17是无法识别单词符号的错误情况。l代表任何字母,d代表任何数字。根据这个转换图,我们用C语言直接编写一个词法分析程序来识别该语言中的所有单词。3.6词法分析程序的编写方法,在一个例子中,我们规定所有的关键字都不能被用户用作自己定义的标识符,这样我们就可以把关键字当作一种特殊的标识符,而不是建立相应的转换图。但是它们需要预先排列在一个表中,这个表叫做关键字表。当通过使用状态转移图来识别标识符时,搜索关键字表以确定它是否是关键字。其次,规定如果关键字、标识符和常量之间没有明确的运算符或分隔符,则必须至少使用一个空白字符作为。

11、间隔,即此时的空白字符是有意义的。根据状态转移图构造词法分析器最简单的方法是使每个状态对应一个小程序。1。ch字符变量,它存储当前读取的源程序字符。2.令牌字符数组,存储构成单词符号的字符串。3。getch () read character函数,每次调用它时,从输入缓冲区读入源程序的下一个字符都放在ch中,读字符指针指向下一个字符。4。函数,每次调用它时,检查ch中的字符是否为空字符,如果是空字符,重复调用getbc()直到ch中输入一个非空字符。首先,我们介绍了词法分析器使用的全局变量和需要调用的函数如下:3.6词法分析器的编写方法,6。字母(ch)和degit(ch)布尔函数,分别确定c。

12、h中的字符是字母还是数字,从而给出真还是假。7。reserve () integer函数,在token中查找字符串的关键字表,如果是关键字,返回其代码,否则,返回标识符10的物种代码。5。concat()函数,每次调用都会将当前ch中的字符与令牌中的字符串连接起来。例如,假设令牌字符数组中的原始值是“AB”,而“C”存储在CH中。调用concat()后,令牌数组中的值变成“abc”。3.6词法分析器的编写方法,8。retract()函数,读取字符指针缩进一个字符。9.return()函数收集并携带必要的信息,并将其返回给调用者,即解析器。10.dtb()二进制转换函数,它将令牌中的数字字符串转。

13、换为二进制数字表示形式,并将其作为函数值返回。根据语言的状态转换图,词法分析程序用C语言编写如下:scanner()token=null;getch();getbc();if(字母(ch)而(字母(ch) |数字(ch)concat();getch();收回();c=准备金();if(c!=10)返回(c,令牌);否则返回(10,令牌);与状态转移图相比,用C语言编写的词法分析程序如下:否则如果(数字(ch)而(数字(ch)连接()的话;getch();收回();return(11,dtb();否则开关(ch)箱:返回(13),打破;case-: return(14),打破;case*: re。

14、turn(15),打破;case/: return(16),打破;案例)返回(18,收回();返回(19),打破;case : getch();如果(ch=)返回(22),收回();返回(21),打破;案例;返回(23),打破;默认值:错误();打破;因此,只要构造有限自动机来识别语言文字符号,就很容易构造词汇分析程序来识别语言文字符号。3.6词法分析程序的编写方法和操作,1。用范式描述下列正规集:(1)c语言的十六进制整数;(2)由以ex开头或结尾的所有小写字母组成的符号串;(3)十进制的偶数。2.构造对应于以下正规表达式的最小确定性有限自动机:(1)(AA | B)*(A | BB)*(2)AB * C * D(3)(A | B)* | BB)*。本章总结并重点介绍了词法分析程序的设计思想和构建方法。主要内容如下:1 .词法分析器的功能是从左到右扫描源程序串,并根据语言的词法规则识别各种单词符号。输出单词符号的形式是二进制:(单词类别,单词值本身),本章总结,例如,定义单词“标识符”的正规公式是l (l | d)*,正规语法是标识符l |标识符l |标识符d,2程序语言单词符号的两种定义方式,即正规语法,正规公式,本章总结,3有限自动机有确定和不确定,有限自动机通常表示为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值