中国石油大学,编译原理第03章、文法和语言_第1页
中国石油大学,编译原理第03章、文法和语言_第2页
中国石油大学,编译原理第03章、文法和语言_第3页
中国石油大学,编译原理第03章、文法和语言_第4页
中国石油大学,编译原理第03章、文法和语言_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1教学目标:z本章是编译原理课程的理论基础,要求掌握形式语言的基本术语和概念。z掌握文法和语言的定义,文法的二义性的判断方法及句型的分析方法。z熟练使用文法定义程序设计语言的单词和语法成分。z对形式语言的理论有一个初步认识。第三章 文法和语言2本章目的 为语言的语法描述寻求工具工具要对程序设计语言给出精确无二义的语法描述。(严谨、简洁、易读)形式工具形式语言,抽象地定义为一个数学系统。 “形式”是指这样的事实:语言的所有规则只以什么符号串能出现的方式来陈述。 3本章知识点(内容)引言和预备知识文法和语言的形式定义文法的类型上下文无关文法及其语法树上下文无关文法的句型分析有关文法实用中的一些说明

2、43.1 文法的直观概念和语言概述当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于含有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构。5“我是大学生”。是汉语的一个句子句子=主语谓语主语=代词名词代词=我你他名词=王明大学生工人英语谓语=动词直接宾语动词=是学习直接宾语=代词名词 有了一组规则以后, 不断地用=的右边代替左边,就可以导出句子。6汉语描述规则z有了这组规则以后,可按如下方式导出句子:z先找=左端的带有的规

3、则,并将它用=右端的符号串代替,于是表示成:y z然后在得到的串 中,选取或 ,再用相应规则的=右端代替之。比如,选取了 ,并采用规则 = ,那么得到:y 7汉语描述规则导出过程z 依此类推,句子“我是大学生”的全部导出过程是:z z z 我z 我z 我是z 我是z 我是大学生8“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。这些规则成为我们判别句子结构合法与否的依据,换句话说,这些规则看成是一种元语言,用它描述汉语。这里仅仅涉及汉语句子的结构描述。其中一种描述元语言称为文法。9符号和=符号z这里“”读作“导出”或“派生出”,含义是使用一条规则,代替左端的某

4、个符号,产生右端的符号串。z而“:=”(通常又简记为“”)读作“定义为”或“由组成”,而每一条规则又称作是产生式或重写式。这样的一种描述形式就称作是BNF(Backus Normal Form,巴科斯范式)。10C语言中的赋值表达式z =z z z z |z (|)nz A|B |C |D |E |F |G |H |a |J |K |L |M |N |Oz |P |Q |R |S |T |U |V |W |X |Y |Z |a |b |cz |d |e |f |g |h |a |j |k |l |m |n |o |p |qz |r |s |t |u |v |w |x |y |zz 0 |1 |

5、2 |3 |4 |5 |6 |7 |8 |9z + |- |* |/ 文法的BNF表示11语 言 概 述z语言是由句子组成的集合,是由一组符号所构成的集合。z汉语-所有符合汉语语法的句子的全体z英语-所有符合英语语法的句子的全体z程序设计语言-所有该语言的程序的全体 语法 Syntaxz语言研究的三个方面 语义 Semantics 语用 Pragmatics12z 如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的语言称作形式语言。z 形式语言抽象地定义为一个数学系统。z “形式”是指这样的事实:语言的所有规则只以什么符号串能出现的方式来陈述。z 形式语言理论是对符号串集合的表示法

6、、结构及其特性的研究。z 是程序设计语言语法分析研究的基础。133.2 有关定义和记号的回顾符号和符号串符号:可以相互区别的记号(元素)。字母表:符号(元素)的非空有穷集合(符号集)。符号串:由字母表中的符号组成的任何有穷序列称为该字母表上的符号串。1.空符号串(没有符号的符号串)是上的符号串 2.若x是上的符号串,a是的元素,则xa是上的符号串3. y是上的符号串,当且仅当它可以由1和2导出。 例如: =a,b ,a,b,aa,ab,aabba都是上的符号串14 符号串s的头(前缀):移走符号串s尾部的零个或多于零个符号得到的符号串。 如: b是符号串banana的一个前缀。 符号串s的尾(

7、后缀):删去符号串s头部的零个或多于零个符号得到的符号串。 如:nana是符号串banana的一个后缀。 符号串s的子串:从s中删去一个前缀和一个后缀得到的符号串。 如:ana是符号串banana的一个子串。15 对于每个符号串s, s和两者都是符号串s的前缀,后缀和子串。 符号串s的真前缀,真后缀,真子串:任何非空符号串 x,相应地,是s的前缀,后缀或子串,并且 s x 符号串的运算 符号串的长度:符号串中符号的个数.符号串s的长度记为|s|。 的长度为0 连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy 如 x=ab,y=cd 则 xy=abcd 有a = a 方幂:

8、符号串自身连接n次得到的符号串 an 定义为 aaaa n个a的连接 a1=a, a2=aa则a0=16 符号串集合:若集合A中所有元素都是某字母表 上的符号串,则称A为字母表 上的符号串集合。 两个符号串集合A和B的乘积 定义为 AB = xy|x A且y B 若 集合A= ab,cde ,B = 0,1 则 AB = ab1,ab0,cde0,cde1 使用 * 表示 上的一切符号串(包括)组成的集合。*称为的闭包。 上的除外的所有符号串组成的集合记为 + 。 +称为的正闭包。17例:=a,b *=,a,b,aa,ab,ba,bb,aaa,aab, +=a,b,aa,ab,ba,bb,aa

9、a,aab,.2*.32*18有关定义和记号 语言是由句子组成的集合,是由一组符号所构成的集合。换言之,字母表 上的一个语言是 上的一些符号串的集合 (字母表 上的每个语言是 *的一个子集)。 例如:字母表=a,b ,*=,a,b,aa,ab,ba,bb,aaa,aab, 集合ab,aabb,aaabbb,anbn, 或表示为w|w*且w=anbn,n1为字母表 上的一个语言。 集合a,aa,aaa,或表示为w|w*且w=an,n1 为字母表 上的一个语言。 是一个语言。 即 是一个语言。19语言上的有关运算 设L是( 上的)一个语言,M是( 上的)一个语言, 语言L和M的并,交,差,补是一个

10、语言。 语言L和M的并为 L M,是一个语言: w|w is in L or is in M 如: L1 =a,b,y,z M1 =0,1,28,9 L1 M1=a,b, y,z, 0,1,28,9 语言L和M的连接是一个语言,记为 LM LM=st |sL且 tM 如: L1M1 =a1,b1,y1,z0,z1,a2,b2a9z9 有L = L=L。 L的n次连接Ln= LL.L 20 语言L的 闭包记为 L*, L*= L0 L1 L2 L0= Ln= L Ln-1= Ln-1 L,n 1 语言L的正 闭包记为 L+ L+= L1 L2 L3 . L*= L+ 如: L1 =a,b,y,z

11、, M1 =0,1,28,9 (L1 M1)=a,b, y,z,0,1,28,9 (L1 M1)*=a,b, y,z,0,1,28,9,aa,0a,xyz,6789st. L1(L1 M1)*=所有字母打头的字母和数字符号串213.3 文法和语言的形式定义如果语言是有穷的(只含有有穷多个句子),可以将句子逐一列出来表示如果语言是无穷的,找出语言的有穷表示。语言的有穷表示有两个途经: 1. 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 2. 识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”

12、,(要么永远继续下去。) 22文法即是用生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造.下面给出文法的定义,进而在文法的定义的基础上,给出推导的概念,句型、句子和语言的定义。23文法G定义为四元组(VN,VT,P,S )其中:VN:为非终结符号(或语法实体,或变量)集;VT:为终结符号集;P:为产生式(也称规则)的集合; VN,VT和P是 非空有穷集。 S:称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN和VT不含公共的元素,即VN VT = 用V表示VN VT ,称为文法G的字母表或字汇表。规则,也称重写规则、产生式或生成式,是形如或 =的(

13、,)有序对,其中是字母表V的正闭包V+中的一个符号,且至少包含一个非终结符; 是V*中的一个符号。称为规则的左部,称作规则的右部。24例: 文法G=(VN,VT,P,S)VN = S VT = 0, 1 P= S0S1, S01 S为开始符号25例: 文法G=(VN,VT,P,S)VN =标识符,字母,数字VT =a,b,c,x,y,z,0,1,9P= a, z 0, 9 S=26 1. G:SaAb Aab AaAb A 2. GS: SaAb Aab AaAb A 3. GS: SaAb Aab |aAb | 一般用写法 327元符号: = | 习惯表示 大写字母:非终结符 小写字母:终结

14、符如: S AB A Ax | y B z281. 直接推导 是文法G的产生式,若有v,w满足:v=,w=, 其中V*,V* 则称v直接推导到w,也称w是v的直接推导,记作 v w 也称w直接归约到v例:GS: S0S1, S01 0S1 00S11 00S11 000S111 000S111 00001111 S 0S129 + *2. 推导: 若存在v =w0 w1 . wn=w,(n0) 则记为v = w,称v推导出w,或w归约到v 若有v = w,或v=w, 则记为v = w+*30例:GS: S0S1, S01 S 0S1 0S1 00S11 00S11 000S111 000S11

15、1 00001111 S 0S1 00S11 000S111 00001111 S = 00001111 S = S 00S11 = 00S11+*311. 句型 有文法G,若S = x,则称x是文法G的句型。 即:从开始符号推导出的任意符号串。2. 句子 有文法G,若S = x,且xVT*,则称x是文法G的句子。即:从开始符号推导出的终结符号串。例:G: S0S1, S01 S 0S1 00S11 000S111 00001111 S 01 G的句型有:S,0S1,00S11,000S111,00001111,01 G的句子有:00001111, 01*32例:GE: EE+T|T TT*F

16、|F F(E)|aEE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a句子:用符号a,+,*,(和)构成的算术表达式33由文法G生成的语言记为L(G),它是文法G的一切句子的集合: L(G)=x|S = x,其中S为文法的开始符号,且x VT*注:文法描述的语言是该文法一切句子的集合。 例:GS: S0S1, S01 L(G)=0n1n|n1*34例子z例:GS:z(1)S aSBEz(2)S aBEz(3)EB BEz(4)aB abz(5)bB bbz(6)bE bez(7)eE eezL(G)= anbnen | n1 为什么呢?35进一步说明z 36进一步说

17、明z 37文法的等价若L(G1)=L(G2),则称文法G1和G2是等价的。如文法G1A:A0R 与 G2S:S0S1 等价 A01 S01 RA1383.4 文法的类型 通过对产生式施加不同的限制,Chomsky(乔姆斯基)将文法分为四种类型:0型文法(短语文法):对任一产生式,都有(VNVT)+,且至少含有一个非终结符, (VNVT)*1型文法(上下文有关文法):对任一产生式,都有|, 仅仅 S除外39文法的类型(续)2型文法(上下文无关文法):对任一产生式,都有VN , (VNVT)*3型文法(正规文法):任一产生式的形式都为AaB或Aa,其中AVN ,BVN ,aVT*40文法的类型举例

18、例:1型(上下文有关)文法 文法GS: SCDAbbA CaCABaaB CbCBBbbB ADaD C BDbD D AabD41文法的类型举例例:2型(上下文无关)文法 文法GS:SABABS|0BSA|142文法的类型举例GS: S0A|1B|0A0A|1B|0SB1B|1|0GI: I iT I lT iTT dTT lT d例:3型文法(正规文法)43四种文法之间的逐级“包含”关系2型文法1型文法0型文法3型文法44文法和语言0型文法产生的语言称为0型语言1型文法或上下文有关文法( CSG )产生的语言称为1型语言或上下文有关语言(CSL)2型文法或上下文无关文法( CFG )产生的

19、语言称为2型语言或上下文无关语言( CF L ) 3型文法或正则(正规)文法( RG )产生的语言称为3型语言正则(正规)语言( RL ) 四种文法之间的关系 是将产生式做进一步限制而定义的。 45根据形式语言理论,文法和自动机(识别系统)间有这样的关系 0型文法(短语结构文法)的能力相当于图灵机,可以表征任何递归可枚举集,而且任何0型语言都是递归可枚举的 1型文法(上下文有关文法):产生式的形式为1A212,即只有A出现在1和2的上下文中时,才允许取代A。其识别系统是线性界限自动机。46 带 a0 a1 a2 a3 a4 a5 a6 a7 a8 an-1 an 有限控制器磁头 任何能用图灵机

20、描述的计算都能机械实现,任何能在现代计算机上实现的计算都能用图灵机描述47 2型文法(上下文无关文法CFG):产生式的形式为A,取代A时与A的上下文无关。其识别系统是不确定的下推自动机。 3型文法(正规文法RG):产生的语言是有穷自动机(FA)所接受的集合484种类型的文法的主要特点493.5 上下文无关文法及其语法树上下文无关文法有足够的能力描述程序设计语言的语法结构50GE: EE+T|T TT*F|F 判断a+a*a是否为该文法的句子? F(E)|aEE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a EE+T E+T*F E+T*a E+F*a E+a*a

21、T+a*a F+a*a a+a*aEE+T T+T T+T*F F+T*F F+F*F a+F*F a+F*a a+a*a51规范推导 规范句型最左(最右)推导:在推导的任何一步,其中、是句型,都是对中的最左(右)非终结符进行替换最右推导被称为规范推导。由规范推导所得的句型称为规范句型52 设G=( VN,VT,P,S)为一CFG,若一棵树满足下列4个条件,则此树称作G的语法树(推导树)(派生树):1. 每个结点都有一个标记,此标记是V的一个符号2. 根的标记是S3. 若一结点n至少有一个它自己除外的子孙,并且有标记A,则肯定AVN4. 如果结点n有标记A,其直接子孙结点从左到右的次序是n1,

22、n2,nk,其标记分别为A1,A2,Ak,那么AA1A2,Ak一定是P中的一个产生式语法树的结果:从左到右读出叶子的标记而构成的行 53语法树-句型推导的直观表示给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)定理:G为上下文无关文法,对于,有S = ,当且仅当文法G有以为结果的一棵语法树(推导树)*54构造语法树GE: EE+T|T TT*F|F F(E)|aEE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a E EE + T E + T T E E + T T F55EE+T T+T F+T a+T a+T*F a+F*F

23、 a+a*F a+a*a (最左推导)EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a (最右推导)EE+T T+T T+T*F F+T*F F+F*F a+F*F a+F*a a+a*a E E + T T T * F F F a a a 看不出句型中的符号被替代的顺序56上下文无关文法的语法树的用处用于描述上下文无关文法句型推导的直观方法 例: GS:SaASASbAASSSaAba S a A S S b A a a b a句型aabbaa的语法树(推导树)叶子结点:树中没有子孙的结点。从左到右读出推导树的叶子标记连接成的文法符号串,为GS的句

24、型。也把该推导树称为该句型的语法树。57上下文无关文法的语法树z并没有表明推导过程中施用产生式的顺序 例: GS:SaASASbAASSSaAba S a A S S b A a a b aSaASaAaaSbAaaSbbaaaabbaaSaASaSbASaabASaabbaSaabbaaSaASaSbASaSbAaaabAaaabbaa58一棵语法树表示了一个句型的种种可能的(但未必是所有的)不同推导过程,包括最左(最右)推导。但是,一个句型是否只对应唯一的一棵语法树呢?一个句型是否只有唯一的一个最左(最右)推导呢?59例:GE:E aE E+EE E*EE (E)分析句型a*a+a E E

25、 + E E * E a a a E E * E a E + E a a句型 a*a+a的两个不同的最左推导:推导1:E E+E E*E+E a*E+E a*a+E a*a+a推导2:E E*E a*E a*E+E a*a+E a*a+a60 若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的 或者,若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的 判定任给的一个上下文无关文法是否二义,或它是否产生一个先天二义的上下文无关语言,这两个问题是递归不可解的,但可以为无二义性寻找一组充分条件,如:规定运算符的优先顺序和结合规则。 61 文法的二义性和语言的二义性是

26、两个不同的概念。因为可能有两个不同的文法G和G,其中G是二义的,但是却有L(G)=L(G),也就是说,这两个文法所产生的语言是相同的。二义文法改造为无二义文法GE: E a GE:E T|E+T E E+E T F|T*F E E*E F (E)|a E (E) 规定优先顺序和结合律z 如果产生上下文无关语言的每一个文法都是二义的,则说此语言是先天二义的。对于一个程序设计语言来说,常常希望它的文法是无二义的,因为希望对它的每个语句的分析是唯一的。62课 上 练 习z有文法GN: NSE|E SSD|D E 0|2|4|6|8|10 D 0|1|2|3|4|5|6|7|8|9(1)证明此文法有二

27、义性。(2)此文法描述的语言是什么?(3)试写出另一文法,其产生的语言和GN产生的语言等价且是无二义性的。633.6 句型的分析一、有关概念1.句型分析 句型分析就是识别一个符号串是否为某文法的句型,是某个推导的构造过程。2.分析程序 在语言的编译实现中,把完成句型分析的程序称为分析程序或识别程序。分析算法又称识别算法。3.从左到右的分析算法 从左到右的分析算法,即总是从左到右地识别输入符号串,首先识别符号串中的最左符号,进而依次识别右边的一个符号,直到分析结束。64二、句型的分析算法分类 分析算法可分为2类:1.自顶向下(自上而下)分析法: 从文法的开始符号出发,反复使用文法的产生式,寻找与

28、输入符号串匹配的推导。2.自底向上(自下而上)分析法: 从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。65两种方法反映了两种语法树的构造过程自顶向下方法 是从文法符号开始,将它做为语法树的根,向下逐步建立语法树,使语法树的结果正好是输入符号串;自底向上方法 则是从输入符号串开始,以它做为语法树的结果,自底向上地构造语法树。66自顶向下的语法分析-例例:文法G:S cAd A ab A a识别输入串w=cabd是否为该文法的句子SSScAdcAd a b推导过程:S cAd cAd cabd67自底向上的语法分析-例例:文法G: S cAd A ab A a识别输入串w=cabd是否

29、该文法的句子 S A A c a b d c a b d c a b d 规约过程构造的推导: cAd cabd S cAd68 (1)S cAd (2) A ab (3)A a 识别输入串w=cabd是否为该文法的句子1. 自顶向下的语法分析若S cAd 后选择(3)扩展A, S cAd cad , 那将会? w的第二个符号可以与叶子结点a得以匹配,但第三个符号却不能与下一叶子结点d匹配宣告分析失败!导致失败的原因是在分析中对A的选择不是正确的。 S c A d a69对串cabd的分析中,如果不是选择ab用产生式(2),而是选择a用产生式(3)将a归约到了A,那么最终就达不到归约到S的结果

30、,因而也无从知道cabd是一个句子。c a b d c A b d a(1)S cAd (2) A ab (3)A a 识别输入串w=cabd是否为该文法的句子2. 自底向上的语法分析70三、句型分析的有关问题1. 在自顶向下的分析方法中如何选择使用哪个产生式进行推导?假定要被代换的最左非终结符号是B,且有n条规则:BA1|A2|An,那么如何确定用哪个右部去替代B?2.在自底向上的分析方法中如何识别可归约的串?在分析程序工作的每一步,都是从当前串中选择一个子串,将它归约到某个非终结符号,该子串称为“可归约串”71四、刻画“可归约串”文法GS1. 句型的短语 S = A且 A = ,则称是句型

31、相对于非终结符A的短语。2. 句型的直接短语(或简单短语) 若有A ,则称是句型相对于非终结符A 的直接短语。3. 句型的句柄 一个句型的最左直接短语称为该句型的句柄。*+72例 :a*a+a 的短语、直接短语和句柄 E E + T T FT * F a3 短语:a1* a2+ a3, a1* a2 ,F a2 a1 , a2 , a3 。 a1 直接短语: a1 , a2 , a3 。句柄: a1 GE:EE+T|T TT*F|F F(E)|a句型:a*a+a从句型的推导树上很容易找到句型的短语和直接短语。看P4573EET+a3a1TT*FFFa2 且且Fa1则则称称a1是句型是句型a1*

32、a2+a3相对于相对于F的短语的短语,也是相对,也是相对于规则于规则Fa的直接短语的直接短语 且且Fa2则则称称a2是句型是句型a1*a2+a3相对于相对于F的短语的短语,也是相对,也是相对于规则于规则Fa的直接短语的直接短语 且且Fa3则则称称a3是句型是句型a1*a2+a3相对于相对于F的短语的短语,也是相对于规则也是相对于规则Fa的直接短语的直接短语 则则a1是句型是句型a1*a2+a3相对于相对于T的短语的短语 则则a3是句型是句型a1*a2+a3相对于相对于T的短语的短语 则则a1*a2是句型是句型a1*a2+a3相对于相对于T的短语的短语 则则a1*a2是句型是句型a1*a2+a3

33、相对于相对于E的短语的短语 则则a1*a2+a3是句型是句型a1*a2+a3相对于相对于E的短语的短语743.7 文法实用中的一些说明-化简文法一、文法中不含有害规则和多余规则1. 有害规则:形如UU的产生式。会引起文法的二义性。2. 多余规则:指文法中任何句子的推导都不会用到的规则。文法中不含有不可到达和不可终止的非终结符。 3. 不可到达:文法中某些非终结符不在任何规则的右部出现,该非终结符称为不可到达。4. 不可终止: 文法中某些非终结符,由它不能推出终结符号串,该非终结符称为不可终止。75二、不含多余非终结符的条件 对于文法GS,为了保证任一非终结符A在句子推导中出现,必须满足如下两个条件: 1. A必须在某句型中出现 即有S =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论