收藏 分享(赏)

编译原理 第2章 文法和语言.ppt

上传人:myk79025 文档编号:7184386 上传时间:2019-05-09 格式:PPT 页数:83 大小:669KB
下载 相关 举报
编译原理 第2章 文法和语言.ppt_第1页
第1页 / 共83页
编译原理 第2章 文法和语言.ppt_第2页
第2页 / 共83页
编译原理 第2章 文法和语言.ppt_第3页
第3页 / 共83页
编译原理 第2章 文法和语言.ppt_第4页
第4页 / 共83页
编译原理 第2章 文法和语言.ppt_第5页
第5页 / 共83页
点击查看更多>>
资源描述

1、第2章 文法和语言,A thousand-li journey is started by taking the first step. 千里之行,始于足下,第2章 文法和语言(P12),2.1 字母表和符号串 2.2 文法 2.3 推导 2.4 句型和句子 2.5 语言 2.6 递归规则与递归文法 2.7 短语、简单短语和句柄 2.8 语法树 2.9 子树与短语 2.10 由树构造推导过程 2.11 文法的二义性 2.12 有关文法的实用限制 2.13 文法和语言分类,学习重点,1 文法的定义、分类和二义性 2 最左推导、规范推导(或最右推导) 3 语言、句型和句子 4 短语、简单短语(或直

2、接短语)和句柄 5 语法树,形式语言(P12),如果不考虑语义和语用,只从语法这一侧面来看语言,它是由符合某种语法(用规则定义)的句子构成的集合,这种意义下的语言称作形式语言。,例汉语:所有符合汉语语法的句子的全体英语:所有符合英语语法的句子的全体程序设计语言:所有符合该语言语法的程序的全体,形式语言,形式语言抽象地定义为一个数学系统,即能用数学符号和规则描述的语言。形式语言理论是对符号串集合的表示法、结构及其特性的研究。这种理论对程序设计语言的设计和编译程序的构造有着重大的作用。,2.1 字母表和符号串(P12),字母表 (或符号集) :元素的非空有穷集合。,例二进制数语言的字母表=0,1

3、汉语的字母表中包括汉字、数字及标点符号等PASCAL语言的字母表是由字母、数字、若干专用符号及BEGIN、IF之类的保留字组成C语言的字母表由字母、数字、若干专用符号以及if、else、while等关键字组成,2.1 字母表和符号串,符号:字母表中的元素。,例 =a,b,for,1,则a,b,for,1都是的符号。,不要把符号理解成字符。,典型的符号有字母、数字、各种标点符号和各种运算符。,2.1 字母表和符号串,符号串:由字母表上0个或多个符号所组成的任何有穷序列。空符号串 也是字母表上的符号串,它由0个符号组成。,例 =0,1,则, 0,1,01,10,00,11,100,0110,111

4、110000等二进制数都是上的符号串 =a,b,c,+,*,则, a , b , c , + , *,aa,ab,ac,a+,a*,ba,bb,bc,b+,b*,aaa,bbb等都是上的符号串,一个字母表上的全部符号串所组成的集合是无穷的。,2.1 字母表和符号串,符号串的长度:指符号串x中所含符号的个数,记为|x|。特别地, |=0。 例=a,b,c,+,*, |abc|=3,|abc+*abc|=8,符号串相等:若x、y是字母表上的两个符号串,那么当且仅当组成x的各符号与组成y的各符号依次相等时,则符号串x与符号串y相等,记作x=y。 例当x=abbc,y=abbc 时,则x=y当x=ab

5、,y=ba 时,则xy,2.1 字母表和符号串,符号串的前缀:指从符号串x的末尾删除0或多个符号后得到的符号串。 例u、uni、university都是university的前缀,符号串的后缀:指从符号串x的开头删除0或多个符号后得到的符号串。 例ty、sity、university都是university的后缀,符号串的子串:指从符号串x的开头和末尾删除0或多个符号后得到的符号串, 例ver是university的子串, 符号串的前缀、后缀都是它的子串。,2.1 字母表和符号串,符号串的连接:若x、y是两个符号串,则xy是将符号串y连接在符号串x的后面。,例x=ab,y=ba,则 xy=ab

6、ba,若x、y是字母表上的两个符号串,则xy也是字母表上的符号串。,除x=x=x外,连接没有交换率,即 xy yx 。,2.1 字母表和符号串,集合的乘积运算:令A、B为两个符号串集合,AB=xy|xA ,yB 。对于空集合有,有 A=A =A 。 例A=a,b, B=c,d,则AB=ac,ad,bc,bd,符号串的幂运算:若x是符号串,则: x0=, x1=x , x2=xx,xn=xxx=xxn-1=xn-1 x,其中 n0 。 例x=abc, x0=, x1=abc, x2=abcabc,,2.1 字母表和符号串,集合的幂运算:设A为符号串集合,则:A0= A1=A A2=AAAn=AA

7、A=AAn-1=An-1 A,其中 n0,例A =a,b,则A0=A1=a,bA2=aa,ab,ba,bb,2.1 字母表和符号串,集合的正闭包:设A为一个集合,则:A+ =A1A2.An 例A =a,b,则A+ =a,b,aa,ab,ba,bb,aaa,aab,集合的闭包:设A为一个集合,则:A* =A0 A+ 例A =a,b,则A* =,a,b,aa,ab,ba,bb,aaa,aab, 一个集合的闭包比正闭包多个。,例:,2.2 文法(P14),文法实际上就是描述语言语法结构的形式规则。,例,例,文法G的形式定义:G=(Vn,Vt,P,Z) Vn(非终结符号集)是一个由非终结符号(一般是大

8、写字母或用)构成的非空有穷集合。 Vt (终结符号集)是一个由终结符号(如小写字母、数字、标点符号等)构成的非空有穷集合。 VtVn=,VtVn,V是该文法的字母表或词汇表。 P(产生式集)是一个由产生式或规则构成的非空有穷集合。产生式的形式为: 或:=产生式的左部V+,即不能为空,产生式的右部V*,“”或”“:=”含义相同,表示“定义为”或“由组成”。 Z是文法的识别符号或开始符号, Z Vn,要求Z至少必须在某个产生式的左部出现一次。,2.2 文法,例2-1(P15) 文法 G1=(Vn,Vt,P,Z),其中: Vn=, , , , , Vt= the,ate,banana, monkey

9、 P由下面8条规则组成: 识别符号: , the ate banana monkey,2.2 文法,例2-1(P15) 文法 G1可以简化写成:,G1 : the ate banana monkey, the ate banana monkey,或,2.2 文法,例2-2(P15) 有如下简化表示文法,只给出规则集,写出该文法的终结符号集合、非终结符号集合和识别符号。, 0 1 2 3 4 5 6 7 8 9,解:根据简化约定,可确定: Vn=, Vt=0,1,2,3,4,5,6,7,8,9 识别符号:,2.2 文法,文法的EBNF表示(P16):用一些特殊的元符号“|”、“”和“”、“”、“

10、(” 和“)”、“” 和“”来表示文法。,例2-3 对例2.2文法的13条规则可缩写成::=:=|:=0|1|2|3|4|5|6|7|8|9,“|”:表示“或” 。对于具有相同左部的那些规则, 如 1, 2 , n缩写为: 1 |2 |n,2.2 文法,“”:用于括起由中文字组成的非终结符号或由多个字母组成的符号。,例(一般写成monkey ),2.2 文法,“”和“”:表示可重复连接,tkm表示符号串t可重复连接k到m次,而t表示符号串t可重复连接0到无穷次。,例 13 等价于:|EE+T|T 与 ET+T 相同 字母打头、后面可跟字母或数字的不超过8个字符的标识符文法则为:|07,2.2

11、文法,“”和“ ”:表示括起来的内容可有可无。如t表示符号串t可有可无。,例IF THEN IF THEN ELSE 可写成:IF THEN ELSE ,2.2 文法,“(”和“)”:表示括号内的成分优先。常用于在规则中提取公因子。,例Uxy|xw|xz 可写成:Ux(y|w|z),2.2 文法,练习(P27习题6),已知文法 ET|E+T|E-T TF|T*F|T/F F(E)|i 写出该文法的开始符号、 Vn和Vt。,解:根据简化约定,可确定: 开始符号:E Vn=E,T,F Vt=+,-,*,/,(,),i,2.13文法和语言分类(P26),0型文法(或短语结构文法)若文法中有如下形式的

12、规则: 其中, V+ (即可以是V上的符号序列,但不能为空),V* (即是V上的符号序列,可以是) 。如果文法中有产生式的右部为,并且该产生式的左部不是一个非终结符,则该文法一定是0型文法。0型文法描述的语言为0型语言。,例 文法G1=(Vn,Vt,P,S),其中:Vn=S,A,B,C,D,E ,Vt=a ,P=S:=ACaB,Ca:=aaC,CB:=DB,CB:=E, aD:=Da,AD:=AC,aE:= ,该文法是一个0型文法。,2.13文法和语言分类(P26),1型文法(或上下文有关文法)若文法中有如下形式的规则:Uu其中, UVn,、V*,u V* ,即规则左部可为符号序列,其中U为非

13、终结符号且只有在左右为和的环境下U可变为u。1型文法的产生式左部的长度小于等于其右部的长度,但S除外。1型文法描述的语言为1型语言。,例 文法G2=(Vn,Vt,P,S) ,其中, Vn=S,A,B,C ,Vt=a,b,c ,P=S:=aSBC,S:=aBC,aB:=ab,bB:=bb, bC:=bc,CB:=BC,cC:=cc ,该文法是一个1型文法。,2.13文法和语言分类(P26),2型文法(或上下文无关文法)若文法中的规则都具有如下形式:Uu其中, U Vn , u V*,即2型文法中的规则左部必须是一个非终结符号,规则右部u是V上的符号序列。该文法相当于对1型文法中的规则形式加以限制

14、,即要求和必须为空。2型文法也称作上下文无关文法,描述的语言为2型语言。一般用2型文法来描述程序设计语言的语法规则。,例 文法G3=(Vn,Vt,P,N) ,其中, Vn=N,D ,Vt=0,1,2, 3,4,5,6,7,8,9 ,P=N:=ND|D,D:=0|1|2|3|4|5|6|7|8|9 ,该文法是一个2型文法。,2.13文法和语言分类(P27),3型文法(或正规文法)若文法中的规则都具有如下形式:Ua |Wa(左线性)或 Ua|aW(右线性)其中, U,WVn,aVt ( a可为)。 3型文法中的产生式全部是左线性产生式或全部是右线性产生式。 3型文法描述的语言为3型语言。用3型文法

15、描述程序设计语言的单词的构词规则,如标识符、无符号整数等。,例 左线性3型文法:NN0|N1|N2|N3|N4|N5|N6|N7|N8|N9 N0|1|2|3|4|5|6|7|8|9 这个文法定义的语言就是无符号整数。,2.13文法和语言分类,练习 判断以下文法的类型,S:=ABC C:=BC C:=A BA:=GE BG:=GBF AG:=AD DB:=BD DE:=AE FB:=BF FE:=Ea AA:=,文法GZ: Z:=0B|1C B:=1Z|1 C:=0Z|0,0型文法,3型文法,2.13文法和语言分类,练习 判断以下文法的类型,文法GS: S:=A A:=aABD|abB BD:

16、=CB CB:=CD CD:=BD bB:=bb D:=c,文法GZ: Z:=B0C|C1 B:=Z1|1 C:=Z0|0,1型文法,2型文法,文法的四种分类,2.13文法和语言分类,四种文法的关系:通过对文法的产生式逐渐增加限制来定义四种文法,因此 0型语言包含1型语言,1型语言包含2型语言,2型语言包含3型语言。或者说,3型文法是2型文法的特例,2型文法是1型文法的特例,1型文法又是0型文法的特例 。,直接推导():是文法G的一个产生式, x,yV*,符号串xy中的非终结符号用替换,从而得到符号串xy,则表示为:xy xy其中“”读为“直接推导出”或“直接产生” 。即称xy直接推导出xy,

17、或xy直接产生xy。若从反方向看,则称xy直接归约到xy。显然,文法的产生式右部是其左部的直接推导。,例 已知文法GS: S0S1, S01 0S10011 (使用规则S01,x=0,y=1) S 0S1 (使用规则S0S1,x=,y=) 0S100S11 (使用规则S0S1,x=0,y=1),2.3 推导(P17),2.3 推导,练习 已知文法G:|a|b|z0|1|9,指出下面直接推导所使用的规则: abc abc5,推导( ):如果存在一直接推导序列 0 1 n, 则表示为:0 n其中, “ ”读为“推导出”或“产生”,即 0推导出或产生n。若从反方向看,则称n归约到0。 n 是推导长度

18、,要求n0 。,2.3 推导,+ ,+ ,+ ,2.3 推导,例 已知文法::=:=|:=0|1|2|3|4|5|6|7|8|9 有: 2 将上述三个直接推导连接起来,可得如下推导过程: 2 则记: 2,显然,n=3。,+ ,广义推导( ):如果有0 n 或0 =n, 即n 0,则表示为:0 n 其中, “ ”读为“广义推导出”或“广义产生”。若从反方向看,则称n广义归约到0。,2.3 推导,+ ,* ,* ,* ,2.3 推导,例 已知文法::=:=|:=0|1|2|3|4|5|6|7|8|92,也可记为:2,从到的推导,无须使用任何规则,其推导长度n=0,则记作: ,+ ,* ,* ,2.

19、3 推导,例 GS:SaASASbAASSSaAba 证明S aabbaa。,证明: 第1种 SaASaAaaSbAaaSbbaaaabbaa 第2种 SaASaSbASaabASaabbaSaabbaa 第3种 SaASaSbASaSbAaaabAaaabbaa ,+ ,2.3 推导,规范推导(或最右推导):在推导的任何一步,都是对中的最右非终结符进行替换。,最左推导:在推导的任何一步,都是对中的最左非终结符进行替换。,例 上例中的S aabbaaSaASaAaaSbAaaSbbaaaabbaa(规范推导)SaASaSbASaabASaabbaSaabbaa(最左推导)SaASaSbASaS

20、bAaaabAaaabbaa(非左非右推导),+ ,2.4 句型和句子(P18),句型:设Z是文法G的识别符号,如果Z x,xV* ,则称符号串x为文法G的一个句型。显然,Z是文法G的一个句型。,* ,例 在S aabbaa中,有 SaASaAaaSbAaaSbbaaaabbaa则, aAS、aAa、aSbAa、aSbbaa和aabbaa是该文法的句型,也是该文法的规范句型。,+ ,规范句型:能用规范推导产生的句型。,2.4 句型和句子,句子:设Z是文法G的识别符号,如果Z x,xVt* ,则称符号串x为文法G的一个句子。显然,句型包括句子或说句子是特殊的句型,句子是完全由终结符号组成的句型。

21、,+ ,例 在S aabbaa中,有 SaASaAaaSbAaaSbbaaaabbaa 则, aabbaa是该文法的句子。,+ ,2.4 句型和句子,每一个句子都有一个规范推导,但并非每一个句型都有规范推导。,例 :=:=|:=0|1|2|3|4|5|6|7|8|9 2 句型“2 ”不是规范句型 3 3 句型“3”是规范句型,2.5 语言(P19),语言:一个文法GZ所产生的所有句子的集合L(GZ), 称为文法GZ所定义的语言, 即:L(GZ)=x|xVt* , 且Z x ,例 已知文法GS:S:=0S1|01,求其所产生的语言。 解: S 01 S 0S1 0011 S 0S1 00S11

22、000111 L(GS)=01,0011,000111,=0n1n|n0,+ ,2.5 语言,例 the ate banana monkey,其语言只有下面4个句子:the monkey ate the bananathe banana ate the monkey the monkey ate the monkeythe banana ate the banana,2.5 语言,练习句子:=主语谓语主语:=代词|名词代词:= 你 | 我 | 他名词:= 王明 | 大学生 | 工人 | 英语谓语:=动词直接宾语动词:= 是 | 学习直接宾语:= 代词|名词,下列是否是句子? 我是大学生 王明是

23、大学生 王明学习英语 他学习英语 你是工人,下列是否是句子? 我大学生是 大学生是王明 英语学习王明 大学生学习他 工人是英语,2.5 语言,文法和语言的关系: 给定一个文法,就能从结构上唯一的确定其语言,即: GL(G)。 给定一种语言,能确定其文法,但不唯一,即: LG1 或G2 或。,等价文法:如果不同的文法可描述相同的语言,则称这些文法为等价文法。,文法,语言,1:1,n:1,2.5 语言,例2-5(P19) 已知语言为 L(G)=abna|n 1,构造产生该语言的文法。 解:根据语言的形式,可构造其文法G为:ZaBaBBb|b还可以构造文法G1为:ZaBaBbB|b显然,G和G1是两

24、个不同的文法,但它们都可以描述语言abna|n1,因此它们是等价文法。,2.6递归规则与递归文法(P20),递归规则:是指那些在规则的右部含有与规则左部相同符号的规则。,右递归规则: 形如U:=xU的规则。,例 U:=xUy,因为规则右部含有与规则左部相同符号U, 所以U:=xUy就是一条递归规则。,左递归规则:形如U:=Uy的规则。,2.6递归规则与递归文法,直接递归文法:至少包含一条递归规则的文法。,例 设文法GA:A:=BB:=X|BAX:=Xa|Xb|a|b 该文法是一个具有直接左递归性的文法。,2.6递归规则与递归文法,间接递归文法:表面上看文法的每条规则都不是递归规则,但存在某个推

25、导会导致递归出现。,例 设有文法GS:S:=QdQ:=Rb|SeR:=Sa|Qf|a S Qd Sed,即S Sed 文法G是一个间接递归文法。,+ ,2.6递归规则与递归文法,语言的句子的个数是有穷还是无穷取决于定义该语言的文法是否是递归的。,例 例2-1(P15)的文法是无递归的,因此其所产生的句子是有穷的,只产生4个句子。例2-3(P16)的文法有递归规则,属于递归文法,所以它所描述的语言为所有无符号整数,是无穷的。,2.6递归规则与递归文法,递归文法包括直接递归文法和间接递归文法,运用递归文法使我们能用有穷的文法刻画无穷的语言。,练习 判定如下文法所描述的语言是否是有穷的。S:=(S)

26、S:=,解:因为文法中的第一条产生式S:=(S)是递归规则,所以该文法是递归文法,所描述的语言为L(GS)=,(),(),(), =(n)n|n0,是无穷的。,2.8 语法树(P21),语法树(或推导树):用树形结构来直观地表示句型的推导过程。设有文法G=(Vn,Vt,P,S),对于文法G的任意一个句型都存在一棵相应的语法树,这棵树满足下列4个条件:,如果树中的一个结点A有若干个直接后继,从左到右分别是B1,B2,B3,Bn,则有A:=B1B2B3Bn P。,如果树中的一个结点至少有一个直接后继,则说明该结点一定是一个非终结符号。,树的根结点是文法的开始符号S。,树中的每个结点都有一个标记,此

27、标记是V中的一个符号。,2.8 语法树,例: GS:SaASASbAASSSaAba,例 上例中的S aabbaaSaASaAaaSbAaaSbbaaaabbaa(规范推导)SaASaSbASaabASaabbaSaabbaa(最左推导)SaASaSbASaSbAaaabAaaabbaa(非左非右推导),+ ,2.8 语法树,文法的句型都是按照文法的产生式来生成相应的语法树,其生成过程如下:,推导过程不同,生成语法树的过程也不同,但是,如果文法是无二义性的,则最终生成的语法树是相同的。,语法树的末端节点(叶节点)从左向右排列起来,构成句型。如果叶节点都是终结符号,则从左向右构成句子。,b.根据

28、句型的结构特点来选择文法中产生式,最终生成该句型对应的语法树。,a.以文法G的开始符号作为语法树的根结点,2.10 由树构造推导过程(P23),根据已有的语法树,可以从上而下或从下而上建立推导。,从下而上的方法:逐层地修剪子树末端节点来建立推导。当有两棵以上子树时,原则上修剪那一棵都可以,如果每次总是修剪最左边的子树,即相当于每步都对归约句型的句柄归约,则称为“最左归约”或“规范归约”。规范推导与规范归约互为逆过程。,从上而下的方法:从树根开始由上而下逐层地用子节点代替父节点。当一层中有两棵以上子树根时,原则上先选哪一棵树根替换都可以。而每步都对最右边的子树树根符号替换,则构造出的推导是规范推

29、导。,2.10 由树构造推导过程,练习 已知文法:E:=E+T|TT:=T*F|FF:=(E)|i句型E+(E+T)*i对应的语法树如图所示,请根据该语法树写它的规范推导。,2.10 由树构造推导过程,句型E+(E+T)*i的规范推导:,2.10 由树构造推导过程,语法树和推导之间的对应关系: 每一棵语法树至少存在一个推导与之相对应 每一个推导都存在一棵语法树,语法树,推导,1:n,1:1,2.7 短语、简单短语和句柄(P21),短语:设GZ是一文法, w=xuy是一句型,如果有Z xUy 且U u , 其中UVn , uV+,则称u是一个相对于非终结符号U的句型w的短语。显然,w是相对Z的句

30、型w的短语。,句柄:任一句型的最左简单短语称为该句型的句柄。一个句型的句柄一定是该句型的简单短语。,简单短语(或直接短语):若有 Z xUy 且U u,则称u是一个相对于非终结符号U的句型w的简单短语。一个句型的直接短语一定是该句型的短语。,* ,+ ,* ,2.7 短语、简单短语和句柄,求一个句型的短语、简单短语和句柄的方法:,语法树(建议用该方法):由文法的开始符号开始,通过产生式来构造与该句型相对应的语法树。,推导法:由文法的开始符号开始,找出该句型的所有推导。,2.9 子树和短语(P22),例 已知文法:E:=E+T|TT:=T*F|FF:=(E)|i句型E+(E+T)*i对应的语法树

31、如图所示,请根据该语法树写它的短语、简单短语和句柄。,2.9 子树和短语,句型E+(E+T)*i的短语为: E+(E+T)*i、 (E+T)*i 、 (E+T)、 E+T 、 i,句型E+(E+T)*i的简单短语为: E+T 、 i,句型E+(E+T)*i的句柄为: E+T,2.9 子树和短语,例 GS:SaASASbAASSSaAba求句型aabbaa的短语、简单短语和句柄。,句型aabbaa的短语为: aabbaa 、 abba、 a(左起第2个) 、 ba 、 a(最后1个),句型aabbaa的简单短语为: a(左起第2个) 、 ba 、 a(最后1个),句型aabbaa的句柄为: a(

32、左起第2个),2.11 文法的二义性(P23),二义性文法:如果一个文法所定义的某个句子或句型,它存在两棵(或两棵以上)不同的语法树,那么这个句子或句型是二义性的,该文法是二义性文法。,例2-11(P23) 有文法GE:E= E+E | E*E |(E)| i,分析该文法是否为二义性文法。,解:句子i+i*i存在两棵不同的语法树,因此文法G 是二义性文法。,2.11 文法的二义性,语法树1,在语法树1中, i+i*i的规范推导为: EE+EE+E*EE+E*iE+i*ii+i*i 即,在语法树1中的*先作为句柄归约,表示*优先于+进行运算。,语法树2,二义性产生的后果会导致分析结果不同,导致对

33、句子的理解不同。因此,在算术表达式中规定乘除高于加减,从而避免二义性。,在语法树2中, i+i*i的规范推导为: EE*EE*iE+E*iE+i*ii+i*i 即,在语法树2中的+先作为句柄归约,表示+优先于*进行运算。,2.11 文法的二义性,例2-12(P24) if语句文法如下: = ifthen|ifthenelse| 说明该文法是二义性文法。,解:假设有一个if语句嵌套的句型为: ifthen ifthenelse 该句型存在两棵不同的语法树,所以该文法是二义性文法。,2.11 文法的二义性,语法树1,语法树2,语法树1意味着else和第2个if配对(就近配对),语法树2表示else

34、和第1个if配对。 因此,在if语句中规定else与最近的if配对(即就近配对)。,2.11 文法的二义性,文法的二义性是不可判定的,即不存在一种算法,它能够在有限步内确切地判定一个文法是否是二义性的。,例2-13 改写文法GE:E= E+E | E*E |(E)| i,使其无二义性。 解: 新添非终结符号T和F,将文法改写成: E= T |E+T,T=F |T*F,F= (E) | i这样,就避免了二义性。用改写后的文法给出句i+i*i的语法树如右图所示。此时的语法树是唯一的。,2.12 有关文法的实用限制(P25),文法的实用限制:就是从实用的观点出发,对文法做一些必要的限制。以下是对文法

35、的实用限制:,文法不能是二义性的。,不能有U=U这样的有害规则。,不能有多余规则,推导中始终用不到的规则。(不可达规则),一旦使用某规则后无法推出终结符号串的规则。(无用规则),2.12 有关文法的实用限制,检查多余规则的方法:检查文法中每一条规则左部的每个非终结符号U是否满足下述两个条件: (1) U必须在某个句型中出现,即有:Z xUy (2)必须能够从U推导出终结符号串,即:U t,tVt* 不满足这两个条件的规则就是多余规则。,* ,+ ,2.12 有关文法的实用限制,压缩(或化简)文法的方法:,1.删去形如U:=U的有害规则;(即去掉U:=U),2.删去无用规则; (即使任何一个非终

36、结符都能推导出终结符号串),3.删去不可达规则。 (即使任何一个非终结符都能在某句型中出现),压缩后的文法与原文法是等价的。,2.12 有关文法的实用限制,例2-14(P25) 有文法:Z=Aa,A=Ca|Bb,B=Ba|a,C=Cb ,D=b,去掉有害规则和多余规则。,解:规则C=Cb也是一条无用规则,因为一旦使用了这条规则以后,将使推导无穷地进行下去,即C Cb Cbb Cbbb,无法推出终结符号串。而规则A=Ca因为会产生C,所以也要去掉。由于非终结符号D不出现任何规则的右部且D不是开始符号,所以在句子的推导中不可能用到规则D=b,因此它是不可达规则,应该去掉。最后得到的文法为:Z=Aa

37、 A=Bb B=Ba|a,2.12 有关文法的实用限制,练习 压缩文法 Z:=E+T E:=E|S+F|T F:=F|FP|P P:=G G:=G|GG|F T:=T*i|i Q:=E|E+F|T|S S:=i,压缩后的文法为:Z:=E+TE:=TT:=T*i|i,小 结,1 文法的定义(四元组)、分类(4种类型)和二义性 2 最左推导、规范推导(或最右推导) 3 语言、句型和句子 4 用语法树求短语、简单短语(或直接短语)和句柄 语法树和推导的对应关系 递归文法 压缩文法(删除有害规则和多余规则),习题 (P27),1. 设字母表A=a,符号串x=aaa,写出下列符号串及其长度:x0,xx,

38、x5以及A+. 2. 令=a,b,c,又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3 3. 设有文法GS:S=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。 4. 已知文法GZ:Z=U0V1 , U=Z11 , V=Z00 ,请写出全部由此文法描述的只含有四个符号的句子。 5. 已知文法GS:S=AB, A=aA , B=bBcbc , 写出该文法描述的语言。 6. 已知文法E=TE+TE-T 、 T=FT*FT/F 、 F=(E)i,写出该文法的开始符号、终结符号集合Vt、非终结符号集合Vn。 7. 对第6题的文法,写出句型T+T*

39、F+i的短语、简单短语以及句柄。 8. 设有文法GS:S=S*S|S+S|(S)|a,该文法是二义性文法吗? 9. 写一文法,使其语言是奇正整数集合。 10. 给出语言anbm|n,m1的文法。,作 业 1,1.判断以下文法的类型,说明理由。 (1)文法GE: S aS|aB B bC C aC|a(2)文法GS:= | | = | = a | b | z | A | B | Z=1|2|9|0 (3)文法GA:Aabc | aBbc Bb bBBc CbccbC CbaC aaBaC aa,作 业 1,2 考虑文法GS:SaAbABcA | BBd | 指出该文法的终结符号及非终结符号; (1)给出句子adcb的语法分析树; (2)构造句子adcb的最左推导和规范推导。,注意:下次上课前交。,作 业 2,3 设有文法GS: S P | aPb P ba | bQa Q ab, 考虑它所定义的语言L(GS).4.考虑文法GS: SaSbS | bSaS | 讨论句子abab的最左推导,说明该文法是二义性的。5. 对于题2,画出符号串adcb的语法树,写出adcb的短语、简单短语以及句柄。,注意:下次上课前交。,

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

当前位置:首页 > 网络科技 > C/C++资料

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


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

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

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