上下文无关文法.ppt
《上下文无关文法.ppt》由会员分享,可在线阅读,更多相关《上下文无关文法.ppt(118页珍藏版)》请在三一办公上搜索。
1、2023/10/8,1,第2章 上下文无关文法,研究内容上下文无关文法概述下推自动机非上下文无关语言,2023/10/8,2,上下文无关文法的应用,上下文无关文法的重要性如下表达能力强大足于表示大多数程序设计语言语法可以构造有效的分析算法以检验一个给定的字符串是否由某个上下文无关文法产生上下文无关语言在实践中的重要意义定义程序设计语言:例如BNF范式描述文档格式:例如XML,HTML使语法分析概念形式化简化程序设计语言的翻译:例如设计语法分析器,2023/10/8,3,上下文无关文法的应用,语法分析程序语法分析程序生成器超文本标记语言可扩展标记语言,2023/10/8,4,文法的形式定义,文法
2、G是一个四元组:G=(VN,VT,P,Z),其中:VN是非终结符的有穷集合,也称为语法单元、语法成分或语法范畴,可分解为若干非终结符或终结符VT是终结符的有穷集合,是基本符号,不能再分解V=VNVT称为字汇表(字母表),VNVT=。Z是开始符,ZVN,P是规则式(产生式)有穷集合规则式形如:xy,其中xV*VNV*,称为规则式的左部;yV*称为右部。,2023/10/8,5,文法的类型,Chomsky将文法分为四种类型:型文法(短语结构文法,可压缩的上下文有关文法),最一般的文法,对规则无限制uw uV*VNV*wV*(可为)相应的自动机是图灵机型文法(上下文有关文法,不可压缩的上下文有关文法
3、),对规则有些限制xuyxwy x和y就是上下文,x,yV*,uV*VN,wV+(不可为),这些限制也可以写成:uw|u|w|意为串的长度不可压缩相应的自动机是线性界限自动机,2023/10/8,6,文法的类型,型文法(上下文无关文法,简单短语结构文法),对规则的限制Aw AVN wV*(可为)型文法与字典定义形式相近(一个字用另一些字定义),与人们习惯一致。相应的自动机是下推自动机,与BNF等价。左部均为非终结符,2023/10/8,7,文法的类型,型文法(正规文法,正则文法),规则是线性的,其中左线性:ABa Aa右线性:AaB AaA,BVN,aVT相应的自动机是有限自动机。在程序设计语
4、言中,单词符号用型文法定义。,2023/10/8,8,上下文无关文法概述,上下文无关文法是把变量转化为原语符号串的一组规则,即变量变量或原语符号组成的串上下文无关文法最早被用来描述自然语言的一些规则,在计算机语言学中,Backus范式可以用来表示一种程序设计语言的各种规定,例如字符集、标识字符集、标识符以及各种语句的格式等,2023/10/8,9,上下文无关文法概述,文法G=(V,R,S)被称为是上下文无关文法或2型文法。如果对于R,均有|,并且V成立。关键:对于AV,如果AP,则无论A出现在句型的任何位置,我们都可以将A替换成,而不考虑A的上下文。L(G)叫做2型语言(type 2 lang
5、uage)或者上下文无关语言(context free language,CFL)。,2023/10/8,10,上下文无关文法(例子),构造上下文无关文法G,它所产生的语言为字母表0,1上所有回文全体,即L(G)=w0,1*|w=wRG=(S,0,1;R,S),其中R:S|1|0;SOSO|1S1 分别构造如下三个语言的上下文无关文法L1=anbn|n1;L2=anbncmdm|n,m1L3=anbmcmdn|n,m1G1=(S,a,b;R1,S),其中R1:SaSb|abG2=(S,A,B,a,b,c,d;R2,S),其中R2:SAB,AaAb|ab,BcBd|cdG2=(S,A,a,b,c
6、,d;R3,S),其中R2:SaSd|aAd,AbAc|bc,2023/10/8,11,上下文无关文法的形式化定义,定义2.1 上下文无关文法是一个4元组G=(V,R,S)V:一个有穷集,称为变元集:一个有穷集,称为终结符集,(V=)R:有穷规则集,V(V)*SV:起始变元文法G的语言可以表示为 L(G)=w*|S*w规则左边是单个变元符号,右边的所有符号属于集合V,2023/10/8,12,上下文无关文法的推导和派生,设u,v和是由变元及终结符构成的字符串,A是文法的一条规则,称uAv生成uv,记作uAvuv。如果u=v,或者存在序列u1,u2,uk,使得uu1u2ukv其中k0,则称u派生
7、v,记作u*v。该文法的语言是*|S*,2023/10/8,13,上下文无关文法的形式化定义,在描述一个文法时,通常只写出它的规则出现在规则左边的符号都是变元,其余的符号都是终结符,按照惯例,起始变元是第一条规则左边的变元,2023/10/8,14,上下文无关文法举例,例题2.2:考虑文法G3:例题2.3:考虑文法G4及其生成字符串a+a*a和(a+a)*a的语法分析树及其过程编译程序把用程序设计语言编写的代码翻译成另一种更适合机器执行的代码编译程序提取被编译代码的语义,这一个过程称为语法分析,2023/10/8,15,上下文无关语言与高级程序语言,生成标识符的上下文无关文法 SSA|A|SD
8、 Aa|b|cw|x|y|z|_ D0|1|2|3|4|5|6|7|8|9生成正整形常量的上下文无关文法 SA|BC CCA|A B|1|2|3|4|5|6|7|8|9 A0|B,2023/10/8,16,上下文无关语言与高级程序语言,生成条件语句ifthen和ifthenelse的上下文无关文法(具有二义性)Sif C then S Sif C then S else S Sa|b Cp|qIf p then if q then a else b,2023/10/8,17,上下文无关语言与高级程序语言,生成条件语句ifthen和ifthenelse的上下文无关文法(消除二义性)SS1|S2
9、S1if C then S1 else S2|T S2if C then S|if C then S1 else S2|T Ta|b Cp|qIf p then if q then a else b,2023/10/8,18,形式语言与自然语言,上下文无关文法也可以描述自然语言(以英语为例)SNP VP NPDet N|Det A N AAdj A|Adj VPVbe PP PPPrep NP Vbeam|is|are Deta|an|the Prepon|in|for|V play|go|.N boy|girl|Adjsmall|big|high|.The big red ball is o
10、n the table的推导树,2023/10/8,19,设计上下文无关文法,设计上下文无关文法比设计有穷自动机更加棘手设计上下文无关的一些基本技巧:首先,化繁为简,把一个CFL问题分解成几个简单的CFL问题其次,利用正则,如果一个语言碰巧是正则的,则可先构造它的DFA,再构造其CFG再次,考察子串最后,利用递归,2023/10/8,20,设计上下文无关文法,将一台DFA转变成等价的CFG为DFA的每个状态qi指定一个变元Ri,如果(qi,a)=qj是DFA的一个转移,则把规则RiaRj加入CFG如果qi是DFA的接受状态,则把规则Ri加入CFG如果q0是DFA的起始状态,则取R0作为CFG的
11、起始变元,2023/10/8,21,基本的语法分析方法,对给定的上下文无关文法G=(VN,VT,P,Z)及符号串wVT*,语法分析就是判断串w是否是文法G产生的合法句子,即S*w是否成立?对于计算机程序语言及其编写的程序而言,语法分析的任务就是判断程序中的各个句子是否合法?进一步判断整个程序是否合法?,2023/10/8,22,基本的语法分析方法,基本的语法分析方法有两种:自顶向下分析法:从文法的开始符号出发,能否找到一个最左推导序列导出w,即S+w,或者从根节点S开始,是否能向下构造一棵推导树产生串w自底向上分析法:从字符串w出发寻找一个归约序列,逐步对可归约串向上进行归约,直到文法的开始符
12、号S,2023/10/8,23,歧义性概述,如果一个文法以不同的方式产生同一个字符串,则称文法歧义地产生这个字符串如果一个文法歧义地产生某个字符串,则称这个文法是歧义的,2023/10/8,24,歧义性概述,一个文法歧义地产生一个字符串的意思是:该字符串是两棵不同的语法分析树,而不是两种不同的派生,两种不同的派生可能仅仅是替换变元的次序不同,而不是整个结构的不同对于文法G中的一个字符串的派生,如果在每一步都是替换最左边剩下的变元,则称这个派生是最左派生,2023/10/8,25,歧义性例子,一个歧义文法G5:+|*|()|a这个文法歧义地产生字符串a+a*a,2023/10/8,26,歧义性的
13、形式化描述,定义2.4:如果字符串在上下文法G中有两个或两个以上不同的最左派生,则称G歧义地产生字符串,如果文法G歧义地产生某个字符串,则称G是歧义的。固有歧义:某些上下文无关语言只能用歧义文法产生,这样的语言称为固有歧义的。,2023/10/8,27,上下文无关歧义文法G2,一个歧义文法G2:|a|theboy|girl|flowertouches|likes|seeswith,2023/10/8,28,歧义派生语法树1,The girl touches the boy with the flower在G2文法下的语法分析树1:,2023/10/8,29,歧义派生语法树2,The girl
14、touches the boy with the flower在G2文法下的语法分析树2,2023/10/8,30,上下文无关文法的化简,对一个上下文无关语言L,可以有多个上下文无关文法G,使得L=L(G),其中可能有的文法包含一些对产生该语言没有作用的字符(变量和终结符)和产生式无用字符空产生式单产生式上下文无关文法化简的目的是在不降低文法生成句子能力的前提下,通过限制产生式的格式来降低文法分析算法的复杂度乔姆斯基范式和格雷巴赫范式,2023/10/8,31,无用字符,定义:G=(V,R,S)是一个上下文无关文法,字符XV,如果存在G的一个推导S*X*w,其中,,w*,则称字符X是文法G中的
15、一个有用字符,否则称X为一个无用字符上下文无关文法化简的任务之一就是要消去文法中出现的无用字符。一个字符是无用字符有两种情况:对于一个变量A,如果不能从A中推导出终结符串(即不存在w*,使得A*w),则A是无用的对于任意AV,如果A不出现从初始符号S出现的任何句型中,则A是无用的,2023/10/8,32,无用字符算法,算法1:消去文法中那些不能推导出终极符串的变量输入:上下文无关文法G=(V,R,S)输出:G中那些能推导出终极符串的变量集合V算法步骤:Step1:V0=Step2:VN=AV|存在w*,使得Aw是G的一个产生式Step3:While V0VN do Begin V0=V0VN
16、;VN=AV|存在(VN)*,使得A是G的一个产生式 endStep4:V=VN,2023/10/8,33,无用字符算法,算法2:消去文法中不出现在句型中的变量和终极符输入:上下文无关文法G=(V,R,S)输出:可出现在G的句型中的变量集合V和可出现在G的句型中的终极符集算法步骤:Step1:V=S,=Step2:V=AVa|存在产生式A,使得B出现在中N=AVa|存在产生式A,使得a出现在中=NStep3:if VN-V=then output V and else Begin V=VNV;goto step2 End,2023/10/8,34,无用字符,定理:每个非空的上下文无关语言都可以
17、由一个没有无用字符的上下文无关文法产生例子:上下文无关文法G1=(S,A,B,a,R1,S),其中R1:SAB|a,Aa,故L(G1)=a由算法1,B是一个不能推导出终极符串的变量,故得G2=(S,A,a,R2,S),其中R1:Sa,Aa由算法2,A也不出现G2的任何一个句型中,故得G3=(S,a,R3,S),其中R1:Sa,2023/10/8,35,空产生式,A型的产生式称为空产生式。对于一个上下文无关文法G,如果L(G),那么G中的空产生式就是不必要的了如果出现空产生式,则化简的任务之一就是从文法中消去那些空产生式,2023/10/8,36,空产生式(反例),例子:设文法 G1=(S,A,
18、B,a,b,R1,S),其中R1:SAB,AaA|a,Bb|易知L(G1)=anb|n1an|n1。由于L(G1),对G1化简的任务之一就是设法从G1中删去空产生式。如果只是简单地删去B,则得到文法 G2=(S,A,B,a,b,R2,S),其中R2:SAB,AaA|a,Bb,易知L(G2)=anb|n1。显然L(G1)L(G2),所以简单删去的方法是不行的,2023/10/8,37,空产生式算法,从上下文无关文法G=(V,R,S)(L(G)中删去空产生式获得等价文法G的算法Step1:找出G中那些能够推导出空串的变量集合V=AV|A*Step2:对每个XiV,对G中每个产生式AX1Xi-1Xi
19、Xi+1Xn,(XjV,ji)增加一个产生式AX1Xi-1Xi+1XnStep2:从G中删去所有空产生式,2023/10/8,38,空产生式(例子),对前述文法 G1=(S,A,B,a,b,R1,S),其中R1:SAB,AaA|a,Bb|易知V=AV|A*=B,相关产生式有SAB,因此需要增加一个产生式SA,然后删去空产生式B,得到一个与G1文法等价的不含空产生式的文法G3=(S,A,B,a,b,R3,S),其中R3:SAB|A,AaA|a,Bb 易知L(G3)=L(G1),2023/10/8,39,空产生式,定理:每个不含空串的上下文无关语言都可以由一个不含空产生式的上下文无关文法产生推论:
20、设G是一个上下文无关文法,则L(G)-可以由一个不含空产生式的上下文无关文法产生,2023/10/8,40,单产生式,对上下文无关文法G=(V,R,S),若A,BV,则AB型的产生式称为单产生式单产生式在文法中出现是没有必要的,上下文无关文法化简的任务之一就是设法消去文法中出现的单产生式单产生式的处理有两种情况:,2023/10/8,41,单产生式的两种情况,单产生式的处理有两种情况:情况1:设AB是文法G的一个单产生式,如果G中不存在A*1A2型的推导,则在删去单产生式AB的同时,把各个产生式中出现的变量B都改成A,即可以得到一个没有单产生式AB且同G等价的文法G情况2:设AB是文法G的一个
21、单产生式,如果G中存在A*1A2型的推导,则在删去单产生式AB的同时,对G中的每个B产生式B,都添加一个A-产生式A,即可以得到一个没有单产生式AB且同G等价的文法G,2023/10/8,42,单产生式(例子1),对文法G3:G3=(S,A,B,a,b,R3,S),其中R3:SAB|A,AaA|a,Bb考虑单产生式SA,此处属于情况1。因此删除单产生式SA,并将其它产生式中A改为S,得到文法G4,G4=(S,B,a,b,R4,S),其中R4:SSB|aS|a,Bb,2023/10/8,43,单产生式(例子2),对文法G:G=(S,A,a,b,c,R,S),其中R3:SaS|A,AbA|c易知L
22、(G)=anbmc|n,m0。此中单产生式SA,但其中含有AbA,属于情况2。首先对应于S-产生式SaS,应该增加一个产生式SaA,其次对应于A-产生式AbA和Ac,分别增加两个产生式SbA和Sc,这样得到一个没有单产生式且等价于G的文法G=(S,A,a,b,c,R,S),其中R:SaS|bA|c,AbA|c,2023/10/8,44,单产生式,定理:设L是一个上下文无关语言,且L,则L可以由一个没有无用字符、没有空产生式、没有单产生式的上下文无关文法产生,2023/10/8,45,乔姆斯基范式,定义2.5 称一个上下文无关文法G=(V,R,S)为乔姆斯基范式,如果它的每一个规则具有如下形式A
23、BC(一分为二),或Aa(终极字符)其中,AV and B,CVS,and a此外允许规则S,其中S是起始变元,2023/10/8,46,乔姆斯基范式,定理2.6:任意上下文无关语言都可以用一个乔姆斯基范式的上下文无关文法产生证明思路:转换时分几个阶段把不符合要求的规则替换成等价的符合要求的规则首先,添加一个新的起始变元,然后删除所有形如A的规则,再删除所有形如AB的单一规则在删除时,要对文法做适当的弥补,以确保仍然产生相同的语言最后,把所有留下的规则转换成适当的形式,2023/10/8,47,例子2.7,2023/10/8,48,例子2.7,2023/10/8,49,乔姆斯基范式(例子),对
24、于文法G1=(S,A,B,a,b,R1,S),其中R1:SbA|aB,AbAA|aS|a,BaBB|bS|b利用上述定理的方法,可以改造成乔姆斯基范式G,其产生式集R:SCaA|CaB,Caa,Cbb,ACbD1|CaS|a,D1AA,D2BB,BCaD2|CbS|b,2023/10/8,50,格雷巴赫范式,对于一个不含有空串的上下文无关语言L,格雷巴赫范式要求产生L的上下文无关文法G=(V,R,S)的每个产生式都具有Aa,a,V*的形式,2023/10/8,51,格雷巴赫范式,引理1:设G=(V,R,S)是一个上下文无关文法,其中A1B2,BV,1B2(V)*是G中的产生式,而B1|2|r,
25、i(V)*是G中的全部B-产生式。令G1=(V,R1,S),其中R1是从R中删去产生式A1B2,而添上r个产生式A112|122|1 r2|而得到,则L(G1)=L(G2),2023/10/8,52,格雷巴赫范式,引理2:设G=(V,R,S)是一个上下文无关文法,其中AA1|A2|Ar是G中全部以A为右端首字符的A-产生式,G中其余的A-产生式为A1|2|s。令G1=(VB,R1,S),其中R1是把R中全部A-产生式用下面两组产生式替换而得到的产生式集,则L(G1)=L(G2)1)Aj|jB,j=1,2,s2)Bi|iB,i=1,2,r,2023/10/8,53,格雷巴赫范式,定理1:任何不含
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上下文 无关 文法
链接地址:https://www.31ppt.com/p-6237010.html