编译原理-蒋立源第2章文法和语言.ppt
《编译原理-蒋立源第2章文法和语言.ppt》由会员分享,可在线阅读,更多相关《编译原理-蒋立源第2章文法和语言.ppt(56页珍藏版)》请在三一办公上搜索。
1、第二章 文法和语言,编译过程的核心就是翻译,就是把一种语言翻译成为另一种语言,与自然语言的翻译类似,只不过其工作对象是某种程序设计语言。两个重要的前提:1)描述和定义程序设计语言2)识别或分析这种语言20世纪50年代,语言学家Noam Chomsky(乔姆斯基)提出了一个用来描述语言的数学系统,把用一组数学符号和规则来描述语言的方式叫做形式描述,而把能用数学符号和规则描述的语言称为形式语言。这种理论对程序设计语言的设计和编译程序的构造有着重大的作用。程序设计语言就是形式语言。,2.1 文法及语言的表示,如何来描述一种语言?1)当一个语言仅含有有限个句子时,可采用枚举法来表示这种语言。对于无限的
2、语言寻找出有限的表示,有两种途径:2)生成方式(文法):制定有限条规则,用来生成所要描述的语言中的全部句子。3)识别方式(自动机):建立一种装置(更确切的说,是构造一种算法或过程),此装置以某一字母表上的所有符号串作为输入,并识别这些符号串,当一个符号串是此字母表上某给定语言中的句子时,就接受它,反之,则拒绝接受。,语言的定义:Webster定义:为相当大地区的公众所懂得并使用的“话”,以及组成这些“话”的方法的统一体。另一种定义:某一字母表上符号串(句子)的集合,一种精确化的语言的要求:(1)为所定义语言中的句子提供一种结构性的描述(2)提供一种手段,准确地判别什么是该语言的正确句子,而什么
3、又不是,基本概念和术语,字母表:元素的非空有穷集合。字母表中的每个元素称为“符号”,因此“字母表”也可称为“符号集”。典型的符号有字母、数字、各种标点符号和各种运算符。例如,集合a,b,c,+,*是一个含有5个符号的字母表,而字母表0,1只有2个符号。符号串:由字母表上0个或多个符号所组成的任何有穷序列。特别地,把不包含任何符号的符号串称为空符号串。例如有字母表a,b,c,+,*,则a,b,c,+,*,aa,ab,ac,a+,a*,ba,bb,bc,b+,b*,aaa,bbb等等都是该字母表上的符号串。而所有二进制数都是定义在字母表0,1上的符号串。显然,一个字母表上的全部符号串所组成的集合是
4、无穷的。,2.2 文法和语言的定义,符号串及其集合的运算1,1.符号串的长度:指符号串x中所含符号的个数,记为|x|。如:|abc|=3,|abc+*abc|=8,|=?2.符号串的前缀:指从符号串x的末尾删除0或多个符号后得到的符号串,如、a、ab、abc都是abc的前缀。符号串的后缀:指从符号串x的开头删除0或多个符号后得到的符号串,如、c、bc、abc都是abc的后缀。符号串的子串:指从符号串x的开头和末尾删除0或多个符号后得到的符号串,如abc的子串?符号串的前缀、后缀都是它的子串。,、a、b、c、ab、bc、abc,|=0,符号串及其集合的运算2,3.符号串的连接:若x、y是两个符号
5、串,则xy表示连接,是将符号串y连接在符号串x的后面。若x、y是字母表上的两个符号串,则xy也是字母表上的符号串。如:x=ab,y=ba,那么 xy=abba注意:连接没有交换律,即 xy yx 对于空串有 x=x=x 符号串的方幂:一个符号串x与其自身的n-1次连接称为x的n次方幂,即:X0=,x1=x,x2=xx,,xn=xxx=xxn-1=xn-1x如:x=abc,x0=,x1=abc,x2=abcabc,符号串及其集合的运算3,4.符号串集合的乘积:令A、B为两个符号串集合,A和B的乘积AB定义为:AB=xy|x A,y B例如:A=a,b B=c,d,则AB=ac,ad,bc,bd
6、对于有:A=A=A 符号串集合的方幂:设A为符号串集合,则A的方幂定义为:A0=,A1=A,A2=AAAn=AAA=AAn-1=An-1A例如:A=a,b,c A0=A1=a,b,c A2=AA=aa,ab,ac,ba,bb,bc,ca,cb,cc,符号串及其集合的运算4,5.符号串集合的闭包:设A为一个集合,则集合A的正闭包用A+表示,定义为:A+=A1 A2.A n 集合A的闭包用A*表示,定义为:A*=A 0 A+例如:A=a,b,c则A+=a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab,A*=,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb
7、,cc,aaa,aab,可见,字母表A的正闭包A+就是由A中字母所构成的一切符号串的集合,而A*仅比A+多个。,2.2.2 文法和语言的形式定义,在学习英语时,我们知道句子由主语、谓语组成,主语由冠词、形容词及名词组成等等,这就是说明句子组成的规则。而在形式语言里,这种规则可采用“:=”、“:=”这种形式来表示。分析一个句子是否正确,就是根据这些规则进行的。实际上,文法就是描述语言语法结构的形式规则。,从“产生语言”的角度出发,给出方法和语言的形式定义。产生语言:指制定出有限个规则,借助这些规则可以产生此语言的全部句子。,文法形式定义1,在表示文法时,要说明语言的语法成分(语法范畴),句子中的
8、符号以及语法结构。例如,能够描述句子“the monkey ate a banana”的文法如下:,在这个文法里,其中用“”符号括起来的部分,表示评议的一个语法实体。符号“:=”是一个整体,其含义是“定义为”,也就是左边的语法实体可进一步定义为右边的符号串。在推导过程中,就是一种“替换”关系。而像the、ate、banana这样的符号只在规则中:=的右边出现,不需要进一步定义,这些符号不能用其它符号代替。我们最终需定义的语法成分是。每条规则的形式都是:=。,1):=2):=the 3):=4):=5):=monkey6):=banana 7):=ate 8):=has9):=the 10):=
9、a,“:=”表示“定义为”,文法形式定义2,=the=the=the monkey=the monkey ate=the monkey ate a=the monkey ate a banana,如何用上述规则去产生或推导出相应语言的句子呢?,=+the monkey ate a banana,“=”表示一步推导,“=+”表示多步推导,文法形式定义3,文法的形式定义:文法可表示为一个四元组 GS=(VN,VT,P,S)VN是一个非空有穷集合,该集合中的每个元素称为非终结符号。如上例中VN=、VT是一个非空有穷集合,该集合中的每个元素称为终结符号。如上例中VT=monkey、banana、ate
10、、has、the、a 并且VNVT=,而VNVT称为该文法的字汇表。P是一个非空的有穷集合,它的每个元素叫做产生式或规则。产生式的形式为:或:=是产生式的左部且不能为空,是产生式的右部,并且、V。S是VN集合的一个特殊的非终结符号,称为文法的开始符号。它至少必须在某个产生式的左部出现一次。就是上例文法的识别符号。,文法形式定义4,文法分4种类型(见2.5小节),程序设计语言文法主要为2型文法,这种文法也叫前后文无关文法,本书后面说的文法都是指这种文法。在前后文无关文法中,产生式的左部是一个非终结符号,而右部是由终结符号和非终结符号组成的有穷符号串。这样只要给出产生式集合,所有产生式的左部符号就
11、构成了非终结符号集合VN,而只出现在产生式右部的那些符号构成终结符号集合VT,因此,在表示文法时只需给出规则集合并指定识别符号即可。为了进一步简化,在给出规则集时,可约定将左部符号为开始符号的规则作为规则集合的第一条规则,这样表示文法时只需给出规则的集合即可。显然,上例就是一个简化的文法表示。,文法形式定义5,例2.2,有如下简化表示文法,只给出规则集,写出该文法的终结符号集合、非终结符号集合和开始符号。,1.2.3.4.05.16.27.38.49.510.611.712.813.9,解:根据简化约定,可确定:非终结符号集合:VN=,终结符号集合:VT=0,1,2,3,4,5,6,7,8,9
12、开始符号S:,文法的EBNF表示,所谓文法的EBNF表示,就是在书写文法的规则时,可采用一些特殊的符号“|”、“”和“”、“(”和“)”、“”和“”来表示文法,这些符号叫做元符号。其中“”和“”、“(”和“)”、“”和“”这些元符号总是成对出现。下面介绍各种元符号的含义。,1.元符号“|”:表示“或”.对于具有相同左部的那些规则 如 1、n,可以缩写为:1|2|n例2.3,对例2.2文法的13条规则可缩写成:|0|1|2|3|4|5|6|7|8|9,文法的EBNF表示,2.元符号“”和“”:表示可重复连接,tnm表示符号串t可重复连接n到m次,而t表示符号串t可重复连接0到无穷次。例如,13
13、与|相同 EE+T|T 与 ET+T 相同而字母打头、后面可跟数字或字母的不超过8个字符的标识符文法则为:|07,文法的EBNF表示,3.元符号“”和“”:表示括起的内容可有可无。如t表示符号串t可有可无。例如:IF THEN IF THEN ELSE 可写成:IF THEN ELSE 4.元符号“(”和“)”:表示括号内的成分优先。常用于在规则中提取公因子。例如,Uxy|xw|xz 可写成:Ux(y|w|z)从上述有关元符号的定义和例子可看出,这些元符号为表示文法提供了很大方便。,直接推导,设GS是一文法,是该文法的一个产生式,对于符号串xy,其中x和y是该文法的任意符号串(可为空),推导就
14、是用产生式的右部替换左部,从而得到新的符号串xy。表示为:xy=xy其中“=”表示一步推导。我们称xy直接推导出xy,或xy直接产生xy。若从反方向看,则称xy直接归约到xy。,x,yV*,直接推导,例如有文法 1)2)|3)0|1|2|3|4|5|6|7|8|9对符号串利用规则1可直接推导出:=对符号串利用规则2可直接推导出:=对符号串利用规则3可直接推导出2:=2 将上述三个推导连接起来,可得如下推导过程:=2,推导,如果文法GS存在一直接推导序列0=1=n,其中n0,那么我们说 0推导出n或n归约到0,并记作0=+n,推导长度为n。如果有0=+n 或0=n,即n 0,则记作0=*n。可见
15、,n0的推导和n=0分别称为“+推导”和“*推导”。例如,从开始,分别利用规则1、2、2、3、3,可产生如下推导过程:=2=23这个推导过程可记作:=+23,其推导长度n=5,而从到的推导,无须使用任何规则,可记作:=*,其推导长度n=0。,句型和句子,推导产生的结果可能是句型,也可能是句子。设文法G的识别符号为S,则句型、句子的定义如下:1.如果S=*,且 V*,则称是文法GS的一个句型。2.如果S=+,且 Vt*,则称是文法GS的一个句子。,从文法的开始符号利用规则进行推导,一旦推导出句子,推导过程就不能再继续进行,因为句子中没有非终结符号。假设符号串是某一推导的结果,那么,是句子的必要条
16、件是从S到的推导长度大于等于,即 S=+x,而不可能是S=*x。这是因为识别符号S是非终结符号,而是终结符号串,显然,S不可能与相等,所以S不可能经过步推导就等于。,为何这里是“+推导”?,句型是从识别符号开始经过0步或多步推导出的可由终结符号和非终结符号组成的符号串而句子是从文法的识别符号推导出的完全由终结符号组成的符号串。句子是特殊的句型,是完全由终结符号组成的句型。,语言,一个文法GS所产生的所有句子的集合L(GS),称为文法GS所定义的语言,即:L(GS)=x|S=+x,且x Vt*,一个文法所定义的语言是该文法的终结符号集合Vt上的所有符号串组成的集合的一个子集,该子集中的每个符号串
17、都可从识别符号开始经过至少一步推导出来,即:L(GS)Vt*例如,对例2.1的文法G,其语言有16个句子:the monkey ate the banana the banana ate the monkey the monkey ate the monkey the banana ate the banana而例2.3中的文法,其语言是所有无符号整数,句子是无穷的。文法和语言有如下关系:1)给定一个文法,就能从结构上唯一的确定其语言,即:GL(G)2)给定一种语言,能确定其文法,但不唯一,即:LG1 或G2 或。,语言,例2.4,已知文法GS为:1)SaSb2)Sab 或写成 S aSb|a
18、b求该文法确定的语言。解:从识别符号开始推导,反复用规则1,最后用规则2可得:S=aSb=a2Sb2=an-1 Sbn-1=anbn(n 2)直接用规则2可得:S=ab所以该文法确定的语言为:L(GS)=anbn|n1 反之,试构造产生下列语言的文法anbn|n0S aSb|,语言,例2.5,已知语言为:L(G)=abna|n 1,构造产生该语言的文法。解:根据语言的形式,可构造其文法G为:SaBaBBb|b还可以构造文法G1为:SaBaBbB|b可见,G与G1是两个不同的文法,但它们都可以描述语abna|n1。,如果两个不同的文法可描述相同的语言,那么我们称这两个文法为等价文法。前后文无关文
19、法的等价问题是不可判定的。等价文法的存在,对编译技术的实现有很大帮助,使我们能在不改变文法所确定的语言前提下,为了某种目的而改写文法。,引理2.1 设G=(Vn,Vt,P,S)为一文法,并设A x By是P中的一个产生式。而B1,B2,B k 是P中的全部B-产生式,又设G1=(Vn,Vt,P1,S)是这样的文法,其中,P1是从P中删去A x By并添加产生式Ax1y,Ax2y,A x k y所组成的集合,则L(G1)=L(G)。,递归规则与递归文法,递归规则是指在规则的右部含有与规则左部相同符号的规则。设文法GS,x,y是V上的符号串,若U xUy是文法的规则,且xy!=,则称U xUy为直
20、接递归规则,称U为直接递归的非终结符。特别,若x=,即这个相同的符号出现在右部的最左端,则为左递归规则。如 U Uy若y=,即这个相同的符号出现在右部的最右端,则为右递归规则。如 U xU 若文法GS存在推导U=+xUy,则称U为递归的非终结符。,给定了文法,就确定了语言。句子的个数是有穷还是无穷取决于文法是否是递归的。,若文法GS中至少包含一个递归的非终结符号,则称此文法是递归文法。递归文法使我们能用有穷的文法刻画无穷的语言。,2.3句型的分析,所谓句型的分析,是指构造一种算法,用以判定给定的符号串是否为某一文法的句型(或句子)。通常,句型分析的方法可大致分为两类,即自顶向下的分析和自底向上
21、的分析。前者是从文法的开始符号出发,以给定的符号串为目标,试图推导出此符号串;后者恰好和前者相反,它从给定的符号串出发,反复用文法中规则的左部去替换当前符号串中的相应子串,以期最后“归约”到文法的开始符号。这与分析过程中构造句型相应语法树的方向有关。,规范推导,规范推导(最右推导),每步推导只替换最右边的非终结符号。定义为:对于直接推导xUy=xuy来说,如果y只包含终结符号或为空符号串,那么就把这种推导称为规范推导或最右推导(如果只包含终结符号或为空符号串,则为最左推导),且记作:xUy=rxuy,其中y Vt*。例2.6算术表达式文法GE:E E+T|TT T*F|FF(E)|i给出句子i
22、+i*i的最左推导和最右推导。解:最左推导:E=lE+T=lT+T=lF+T=l i+T=li+T*F=li+F*F=li+i*F=li+i*i最右推导:E=rE+T=rE+T*F=rE+T*i=r E+F*i=rE+i*i=rT+i*i=rF+i*i=ri+i*i,2.3.1 规范推导,每一个句子都有一个规范推导,但并非每一个句型都有规范推导,只有那些能用规范推导产生的句型才是规范句型。例如,对于例2.3中的文法,有句型“2”,其推导过程如下:=2其中第3,步推导变换的不是最右边的非终结符号,不满足规范推导的要求,所以句型“2”不是规范句型。而对于句型“3”,其推导过程如下:=3=3其中的每
23、一步推导都变换的是最右边的非终结符号,所以,句型“3”是规范句型。,2.3.1 规范推导,给定终结符号串w,通过语法分析判定w是否为某一语言L(G)中的句子:自顶向下:试图为w建立一个从G的开始符号S到w的最左推导。显然,若某步推导中被替换的非终结符号U是由若干个后选式定义的,即有U 1|2|n,那么就会出现如何选用后选式的问题。一种办法是逐个用这些后选式试探。若用某个i 替换U能使分析继续,则沿此路径继续;若发现有错,则退回出错点再用下一个i+1 继续试探。故称为带回溯的自顶向下的分析方法。回溯效率低,应设法避免。,2.3.1 规范推导,自低向上:试图从w出发,以相反方向为w建立一个规范推导
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 蒋立源第 文法 语言
链接地址:https://www.31ppt.com/p-6056765.html