计算理论基础章精选文档.ppt
《计算理论基础章精选文档.ppt》由会员分享,可在线阅读,更多相关《计算理论基础章精选文档.ppt(117页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算理论基础章本讲稿第一页,共一百一十七页 上下文无关文法(上下文无关文法(CFG)在程序设计语言和编)在程序设计语言和编译原理中有着重要的应用,因为上下文无关文法译原理中有着重要的应用,因为上下文无关文法可以用来阐述绝大多数的程序设计语言的句法结可以用来阐述绝大多数的程序设计语言的句法结构。此外上下文无关语言也可以作为描述语言翻构。此外上下文无关语言也可以作为描述语言翻译方案的基础。译方案的基础。本章重点讨论本章重点讨论:CFG的简化的简化 CFG的两种范式的两种范式 下推自动机(下推自动机(PDA)的概念)的概念 PDA与与CFG之间的等价转换之间的等价转换 上下文无关语言运算的封闭性上下
2、文无关语言运算的封闭性 以及以及CFL的有关判定问题。的有关判定问题。本讲稿第二页,共一百一十七页3.1 上下文无关文法的派生树上下文无关文法的派生树(推导树推导树)一个上下文无关文法中的一个句型的派生过程可以用一个上下文无关文法中的一个句型的派生过程可以用棵树来描述。棵树来描述。【例例3-1.1】给定文法给定文法G=(S,A,a,b,P,S),其中,其中 P:SaAS|a,ASbA|ba|SS。句型。句型aabbaa的派生过程就可以的派生过程就可以用一棵树来描述,如图用一棵树来描述,如图3-1.1所示。将此树的叶结点符号所示。将此树的叶结点符号从左到右读取下来构成的符从左到右读取下来构成的符
3、号串就是号串就是aabbaa。SaASSbAabaa图3-.11 aabbaa的派生树本讲稿第三页,共一百一十七页1 1派生树的定义派生树的定义设文法设文法 G=(,S)是上下文无关文法是上下文无关文法,如果一棵有序树满足下面四个条件,则它是棵派生树:如果一棵有序树满足下面四个条件,则它是棵派生树:(1)它的每个结点标记的符号是它的每个结点标记的符号是()中的符号;中的符号;(2)根结点标记开始变元根结点标记开始变元S;(3)内结点标记的符号是变元,即是内结点标记的符号是变元,即是中的符号。中的符号。(4)如果一个内结点标记为如果一个内结点标记为A,且,且X1,X2,Xk是是A的从左的从左到右
4、的所有子结点到右的所有子结点,则则AX1X2Xk是是P中一个产生式。中一个产生式。(5)如果一个结点标记符号是如果一个结点标记符号是,则它是其父结点的唯,则它是其父结点的唯一儿子结点。一儿子结点。本讲稿第四页,共一百一十七页其中第其中第(5)条是为了防止下面情况发生:条是为了防止下面情况发生:如产生式如产生式Aa(a是个终极符是个终极符)被误认为被误认为是是Aa或或Aa,而在派生树中被,而在派生树中被画成如图画成如图3-2形式。形式。2派生树的结果 设设T T是棵派生树,将此树的叶结点符号从左到右依次读是棵派生树,将此树的叶结点符号从左到右依次读取下来构成的符号串就是此派生树的结果。取下来构成
5、的符号串就是此派生树的结果。例如,图例如,图3-1.1派生树的结果就是派生树的结果就是aabbaa aabbaa。3派生树与句型的派生关系 设设G=(,S)是是CFG,如果,如果G中有派生中有派生S*,则在则在G中必有一棵以中必有一棵以为结果的派生树。反之,如果为结果的派生树。反之,如果G中中有一棵以有一棵以为结果的派生树,则为结果的派生树,则G中也必有派生中也必有派生S*。可以说派生与派生树是一一对应的。可以说派生与派生树是一一对应的。A AA Aa aa a图图 3-1.2本讲稿第五页,共一百一十七页4 4最左派生与最右派生最左派生与最右派生 所谓最左派生,就是在一个派生的每一步都是对句型
6、所谓最左派生,就是在一个派生的每一步都是对句型中最左边的变元进行替换。中最左边的变元进行替换。例如,例例如,例3-1中中aabbaaaabbaa的派生:的派生:S SaASaASaSbASaSbASaabASaabASaabbaSaabbaSaabbaa aabbaa,此派生是最左派生。此派生是最左派生。所谓最右派生,就是在一个派生的每一步都是对句型所谓最右派生,就是在一个派生的每一步都是对句型中最右边的变元进行替换。中最右边的变元进行替换。S SaASaASaAaaAaaSbAaaSbAaaSbbaaaSbbaaaabbaa,aabbaa,此派生是最右派生。此派生是最右派生。5 5上下文无关
7、文法的二义性上下文无关文法的二义性 设设G是个是个CFG,如果它的某个句子有两棵不同构的派生,如果它的某个句子有两棵不同构的派生树,则称树,则称G是二义性的上下文无关文法。是二义性的上下文无关文法。本讲稿第六页,共一百一十七页【例例3-1.2】给定给定CFG G=(S,a,b,P,S),其中,其中P:SaSbS|bSaS|。句子句子abab的两棵不同构的派生树,如图的两棵不同构的派生树,如图3-1.3所示。所示。图图3-1.3 abab的两棵不同构的派生树的两棵不同构的派生树S Sa aS SS Sb bS S a aS Sb bS Sa aS SS Sb bS Sa a S S b b这说明
8、此这说明此CFG G是有二义性的。是有二义性的。本讲稿第七页,共一百一十七页3.2 上下文无关文法的简化上下文无关文法的简化 一个上下文无关文法有时可以去掉一些符号,或者去一个上下文无关文法有时可以去掉一些符号,或者去掉一些产生式以后,仍然和原来的文法等价,这就是所掉一些产生式以后,仍然和原来的文法等价,这就是所谓文法的简化。谓文法的简化。这里简化文法主要是指:去掉无用符号、去掉这里简化文法主要是指:去掉无用符号、去掉产生产生式和去掉单一产生式。式和去掉单一产生式。1 1去掉无用符号去掉无用符号 定义定义:给定:给定CFG G=(,S),如果在,如果在G中存在派中存在派生生S*X*w,其中,其
9、中w*,X,则称,则称符号符号X是有用的,否则是有用的,否则X是无用的。是无用的。简单地说,无用符号就是简单地说,无用符号就是G中对任何中对任何wL(G)的派生中的派生中都不会出现的符号。都不会出现的符号。本讲稿第八页,共一百一十七页【例例3-2.1】给定文法给定文法G=(S,A,B,C,a,b,P,S),其中,其中P:SAB|a,ABC|a,Cb。G中有派生:中有派生:可见再往下就无法推导了,因而由可见再往下就无法推导了,因而由S只能推出只能推出a,不能推,不能推出其他符号串。所以此文法中,出其他符号串。所以此文法中,A、B、C、b都是无用的都是无用的符号,只有符号,只有S和和a是有用符号。
10、是有用符号。如何去掉无用符号?分两步走,使用两个引理,就可如何去掉无用符号?分两步走,使用两个引理,就可以做到这一点。下面介绍这两个引理。以做到这一点。下面介绍这两个引理。本讲稿第九页,共一百一十七页引理引理3-2.1 给定给定CFG G=(,S),且,且L(G),可,可以找到一个与以找到一个与G等价的等价的CFG G=(,S),使得,使得每个每个A,都有,都有w*,且在,且在G中有中有A*w。证明证明:1)求)求的算法的算法:begin OLD:=NEW:=A|AwP 且且w*While OLDNEW do begin OLD:=NEW NEW:=OLDA|AP,且且(OLD)*end :=
11、NEW,end本讲稿第十页,共一百一十七页下面证明此算法的有效性。下面证明此算法的有效性。显然对任何变元显然对任何变元ANEW,不论不论A是在第是在第步还是在第步还是在第步加入到步加入到NEW中的中的,都有派生都有派生A*w,其中其中w*。只证明只证明G中任何派生中任何派生A*w,w*,必有必有ANEW。(对派生的步数归纳证明对派生的步数归纳证明)a)若此派生是一步完成的,即有若此派生是一步完成的,即有Aw,则说明,则说明P中有产中有产生式生式Aw,于是,于是A在算法的第在算法的第步被添加到步被添加到NEW中。中。b)假设假设G中派生中派生A*w是少于是少于k步完成的步完成的,则则ANEW。c
12、)当当G中有中有k步派生步派生AX1X2 Xnk-1w,不妨设,不妨设w=w1w2 wn,其中,其中Xi*wi,(i=1,2,n),而且由于这些,而且由于这些派生的步数少于派生的步数少于k步,如果步,如果Xi是变元,则根据假设是变元,则根据假设b)得)得Xi最终会加入到最终会加入到NEW中。在执行算法的第中。在执行算法的第步时步时OLD:=NEW,当最后一个当最后一个Xi加入加入OLD时,在执时,在执行算法的第行算法的第步时,就将步时,就将A加入到加入到NEWNEW中。中。本讲稿第十一页,共一百一十七页这说明此算法是有效的,即凡是可以推出终极符串的变这说明此算法是有效的,即凡是可以推出终极符串
13、的变元都会添加到元都会添加到NEW中。中。于是,最后得到变元集合于是,最后得到变元集合。2)构造文法)构造文法G:G(,S),其中,其中 P:由:由P中只含有中只含有()的符号的产生式构成的。的符号的产生式构成的。3)下面证明)下面证明L(G)=L(G)a)显然有显然有L(G)L(G),因为,因为,P,所以,所以G中任何派生中任何派生S*w,在,在G中也有中也有S*w。所以。所以L(G)L(G)。b)证明证明L(G)L(G),(反证法反证法)任取任取wL(G),假设,假设w L(G),则说明在则说明在G中中w的派生的派生S*w中必用到中必用到PP中的中的产生式,即用到了产生式,即用到了中的变元
14、,而这些变元又能中的变元,而这些变元又能推出终极符串,这与上面证明的此算法有效矛盾。所以推出终极符串,这与上面证明的此算法有效矛盾。所以必有必有wL(G),从而从而L(G)L(G)。最后得最后得L(G)=L(G)。本讲稿第十二页,共一百一十七页【例例3-2.2】给定给定CFG G=(S,A,B,C,a,b,P,S),其中,其中P:SA|B,AaB|bS|b,BAB|Ba,CAS|b求一个与之等价的文法求一个与之等价的文法G,使得,使得G中的每个变元都可以中的每个变元都可以推出终极符串。推出终极符串。解解:对:对G应用引理应用引理3-2.1,执行上述算法,得到的结果如,执行上述算法,得到的结果如
15、表表3-2.1所示。所示。循环次数i 初值 1 2 3OLDNEW当算法执行第三次循环时,判定当算法执行第三次循环时,判定OLD=NEW,算算法终止。最后得法终止。最后得GCFG G=(S,A,C,a,b,P,S),其中其中 P:SA,AbS|b,CAS|b实际上,只去掉了不能推出终极符串的变元实际上,只去掉了不能推出终极符串的变元B。A,C,SA,C A,CA,C,SA,C,S本讲稿第十三页,共一百一十七页引理引理3-2.2 给定给定CFG G=(,S),可以找到一个与可以找到一个与G等价的等价的CFG G,G=(,S),使得每个,使得每个X(),都有,都有,()*,且在,且在G中有派中有派
16、生生S*X。证明证明:1执行下面迭代算法求执行下面迭代算法求和和。1)置初值:置初值::=S,:=;2)如果如果A,在,在P中又有产生式中又有产生式A1|2|m,则可以将则可以将1,2,m中的所有变元加到中的所有变元加到中,将中,将1,2,m中的所有终极符加到中中的所有终极符加到中中。重复中。重复2)。3)若没有新的符号可加入到若没有新的符号可加入到、中,算法停止。中,算法停止。最后得到最后得到、。本讲稿第十四页,共一百一十七页2构造构造P:是由:是由P中只含有中只含有()中的符号的产生中的符号的产生式构成的。式构成的。3证明证明L(G)=L(G)a)显然有显然有L(G)L(G),因为,因为,
17、T T,P,所以,所以G中任何派生中任何派生S*w,在,在G中也有中也有S*w。所以。所以L(G)L(G)。b)证明证明L(G)L(G),任取,任取wL(G),不妨设,不妨设w在在G中的中的派生为派生为S*X*w,其中,其中,()*,由上,由上述算法可知,在此派生中出现的所有符号,都不会因为述算法可知,在此派生中出现的所有符号,都不会因为对对G使用此引理而被去掉,所以这些符号必在使用此引理而被去掉,所以这些符号必在中,此派生中所用到的产生式也在中,此派生中所用到的产生式也在P中,所以这个派生中,所以这个派生在在G中也可以实现,因而必有中也可以实现,因而必有wL(G)。故故L(G)L(G)。最后
18、得最后得L(G)=L(G)。本讲稿第十五页,共一百一十七页定理定理3-2.1 设设L是一个非空的上下文无关语言,则是一个非空的上下文无关语言,则L可由一可由一个不含无用符号的上下文无关文法产生。个不含无用符号的上下文无关文法产生。证明证明:设:设G=(,S)是个是个CFG,且,且L(G)=L。先对先对G用引理用引理3-2.1处理后处理后,得,得G(,S),再再将将G 用引理用引理3-2.2处理得处理得G(,S),由,由两两个引理得个引理得L(G)=L(G)。下面证明。下面证明G中不含无用符号。中不含无用符号。假设假设G中有无用符号中有无用符号Y。根据引理。根据引理3-2.2得,在得,在G中必中
19、必存在派生存在派生S*Y,其中,其中,()*,因为,因为G的符号也都是的符号也都是G中的符号,所以此派生在中的符号,所以此派生在G中也可以中也可以实现,又根据引理实现,又根据引理3-2.1得,得,和和中的变元以及中的变元以及Y都可都可以推出终极符串,于是以推出终极符串,于是G中有派生:中有派生:S*Y*w,w*,又因为派生,又因为派生Y*w中的中的符号不会因为对符号不会因为对G用引理用引理3-2.2而被去掉,所以在而被去掉,所以在G中也中也会实现派生会实现派生Y*w,于是,于是G中也有派生中也有派生S*Y*w,这与符号,这与符号Y是无用符号矛盾。所以是无用符号矛盾。所以G中不含无用符号。中不含
20、无用符号。本讲稿第十六页,共一百一十七页 值得注意的是,去掉值得注意的是,去掉G中无用符号时,中无用符号时,一定要先用引理一定要先用引理3-2.1,后用引理,后用引理3-2.2。应用引理的次序不可颠倒,否则应用引理的次序不可颠倒,否则可能遗漏一些无用符号。请看下面例子。可能遗漏一些无用符号。请看下面例子。【例例3-2.3】给定给定CFG G=(S,A,B,a,b,P,S),其中,其中P:SAB|a,Aa求一个与之等价的文法求一个与之等价的文法G”,使得,使得G”中不含无用符号。中不含无用符号。解解:先对:先对G应用引理应用引理3-2.1方法处理,执行此算法得到的方法处理,执行此算法得到的结果如
21、表结果如表3-2.2所示。所示。循环次数i 初值 1 2 3OLD S,A NEW S,A S,A 本讲稿第十七页,共一百一十七页当算法执行第二次循环时,判定当算法执行第二次循环时,判定OLDNEW,算法终止。算法终止。最后得最后得G:CFG G=(S,A,a,b,P,S),其中其中 P:Sa,Aa。再对再对G用引理用引理3-2.2处理,执行算法的结果如表处理,执行算法的结果如表3-2.3所示:所示:循环次数i 初值 1 2 3 S S T a 最后得文法最后得文法G(S,a,P,S),其中,其中P=Sa。但是但是,如果先对,如果先对G用引理用引理3-2.2,后用引理,后用引理3-2.1就得到
22、就得到如下结果:如下结果:本讲稿第十八页,共一百一十七页对对G用引理用引理3-2.2执行算法的结果,如表执行算法的结果,如表3-2.4所示:所示:循环次数i 初值 1 2 3 S S,A,B T a 得文法得文法 G=(S,A,B,a,P,S),P:SAB|a,Aa。再对再对G用引理用引理3-2.1执行算法的结果如表执行算法的结果如表3-2.5所示:所示:循环次数i 初值 1 2 3OLD S,A NEW S,A S,A 最后得文法最后得文法 G=(S,A,a,P,S),P:Sa,Aa。显然,这样做,无用符号显然,这样做,无用符号A没有被去掉。可见去掉文法没有被去掉。可见去掉文法中无用符号时,
23、使用这两个引理的先后次序是很重要的。中无用符号时,使用这两个引理的先后次序是很重要的。本讲稿第十九页,共一百一十七页2 2去掉去掉产生式产生式定义定义:所谓:所谓产生式,就是形如产生式,就是形如A的产生式,其中的产生式,其中A为变元。为变元。给定给定CFG G,如果,如果 L(G),则,则G中所有中所有产生式都可以产生式都可以去掉。如果去掉。如果L(G),则除了开始变元,则除了开始变元S的的产生式产生式(即即S)外,其余外,其余产生式都可以去掉。产生式都可以去掉。为了去掉为了去掉产生式,先定义一个概念产生式,先定义一个概念可为零的变元可为零的变元。定义定义:设:设A是个变元,如果是个变元,如果
24、A*,则称,则称A是可为零的。是可为零的。去掉去掉CFG G中的中的产生式的思路是:产生式的思路是:首先,找出首先,找出G中所有可为零的变元。中所有可为零的变元。然后,对然后,对P中每个形如中每个形如AX1X2Xn的产生式进行如下处的产生式进行如下处理:要添加一些这样的产生式:这些产生式是通过去掉理:要添加一些这样的产生式:这些产生式是通过去掉X1X2Xn中某些可为零的变元而得到的。但是,如果所有中某些可为零的变元而得到的。但是,如果所有Xi(i=1,2,n)都是可为零的,则不可全去掉,因为那样会都是可为零的,则不可全去掉,因为那样会产生新的产生新的产生式产生式A。本讲稿第二十页,共一百一十七
25、页【例例3-2.6】有产生式:有产生式:SaSAbB,设设A与与B都是可为零的,都是可为零的,则由这个产生式变成如下四个产生式:则由这个产生式变成如下四个产生式:SaSAbB,SaSbB(去掉去掉A),SaSAb(去掉去掉B),SaSb(A和和B全去掉全去掉)。注意,要将所有可能的情况均考虑到,才。注意,要将所有可能的情况均考虑到,才能保证新的文法与原文法等价。能保证新的文法与原文法等价。定理定理3-2.2 给定给定CFG G=(,S),可以找到一个不含无用,可以找到一个不含无用符号,又无符号,又无产生式的产生式的CFG G,使得,使得L(G)L(G)。证明:证明:假设假设G已经去掉了无用符号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 理论基础 精选 文档
限制150内