北大编译原理讲义Chapter2.ppt_第1页
北大编译原理讲义Chapter2.ppt_第2页
北大编译原理讲义Chapter2.ppt_第3页
北大编译原理讲义Chapter2.ppt_第4页
北大编译原理讲义Chapter2.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1,第二章 语言的基本知识,学习本章的目的。 2.1 符号串 2.2 文法和语言的定义 2.3 分析树和二义性 2.4 形式语言概观,2,学习本章的目的,构造编译程序的算法是从研究源程序及目标程序产生的,首先找到源语言的形式描述,根据这种描述,构造出相应的分析加工程序。 语言分语法,语义和语用。程序语言语法的形式描述是很好用的,语义的形式描述不那磨好用,但它推动语言理论的发展。,3,2.1 符号串,2.1.1 字母表 2.1 .2 符号串 一. 符号串的定义 二. 术语 三. 符号串的运算 四. 符号串集合的运算,4,字母表是符号的非空有穷集合。任何程序语言都有自己的字母表,例如: 1.计算机语言:由符号“0”和“1”组成的字 母表,=0,1 2. ASCII字符集; 3. Pascal字母表为: = AZ, az, 09, +, -, *, /, , :, , ; ,., , (, ), , , , ,2.1.1 字母表,5,一. 符号串的定义 (1) 是上的一个符号串。 (2) 若x是上的符号串,而a是的元素, 则xa是上的符号串。 (3) y是上的符号串,当且仅当它由(1)和 (2)导出。 由字母表中的符号所组成的的任何有穷 序列被称之为该字母表上的符号串,也称作 “字“。,2.1.2 符号串,6,设s是符号串 前缀:移走s的尾部的零个或多于零个符号 后缀:删去s的头部的零个或多于零个符号 子串: 从s中删去一个前缀和一个后缀 子序列: 从s中删去零个或多于零个符号(这些符号不要求是连续的) 逆转(用SR表示):将S中的符号按相反次序写出而得到的符号串。 长度:是该符号串中的符号的数目。例如|aab|=3,|=0。,二术语,7,:符号串s=banana 前缀:,b,ba,ban,bana,banan,banana 后缀:banana,anana,nana,ana,na,a, 子串: banana,anana,banan,anan, 真前缀,真后缀,真子串: xsx 子序列: baa(这些符号不要求是连续的) 逆转(用SR表示):ananab 长度:banana=6,例,8,1.连接:设x和y是符号串,它们的连接 xy是把y的符号写在x的符号之后得到的符号串。例如,x=ba,y=nana,xy=banana. 2.方幂:x0= ; x1=x; x2=xx; ;xn=xn-1x; 例如, x=ba, x1= ba, x2=baba, x3=bababa,.,三.符号串的运算,9,设L和M是两个符号串集合,则 1.合并:LMs|sL or sM 2.连接:LM st|sL and tM 3.方幂: L0=, L1L, L2LL, ., LnLn-1L 4. 语言L的Kleene闭包,记作L*, L*Li(i=0) =L0L1L2L3 5语言L的正闭包,记作L+(L+L L*) L+Li(i =1) =L1L2L3L4,四. 符号串集合(语言)的运算,10,如:L=AZ,az D=09 1LD=AZ,az ,09 2LD是由所有用一个字母后跟一个数字 组成的符号串所构成的集合。 3L4是由所有的四个字母的符号串构 的集合。 4L(LD)* 是由所有的字母打头的字母和数字组成的符号串所构成的集合. 5D+是由所有的长度大于等于1的数字串所构成的集合.,例,11,2.2 文法和语言的定义,2 . 2 . 1 引子 2 . 2 . 2 文法和语言的定义 一. 文法和语言的定义 二. 推导 三. 语言 四. 最左推导和最右推导 五。短语,直接短语,句柄,12,引子,分析:The grey wolf will eat the goat,谓语,主语,冠词,形容词,名词,动词,直接宾语,助动词,句子,动原,冠词,名词,The grey wolf will eat the goat,13,为了进行机械分析, :“句子由主语后跟随谓语组成”表示为:,句子 主语 谓语 (1) 主语 冠词 形容词 名词 (2) 冠词the 形容词 grey 谓语 动词 直接宾语 (5) 动词 助动词 动词原形 (6) 助动词will 动词原形 eat 直接宾语 冠词 名词 (9) 名词wolf 名词 goat,语法规则,14,:终结符号集,非终结符号集,语法规则,开始符号。,终结符号集VT=the,grey, wolf,will, eat, goat 非终结符号集VN=句子,主语, 谓语, 冠词, 形容词, 名词 , 动词 , 直接宾语 , 助动词 ,动词原形 语法规则集P=句子 主语谓语, 开始符号S= 句子,句子的语法有四部分,15,句子主语 谓语 冠词 形容词 名词 谓语 the 形容词 名词 谓语 the grey名词 谓语 the grey wolf 谓语 the grey wolf 动词 直接宾语 . the grey wolf will eat the goat,句子根据规则推导出来,16,句子 the grey wolf will eat the goat the grey wolf will eat the wolf the grey goat will eat the wolf the grey goat will eat the grey 合符语法且合符语义的句子仅是: the grey wolf will eat the goat,+ ,句子既要合符语法又要合符语义,17,分析:The grey wolf will eat the goat,句子,主语,谓语,冠词,形容词,名词,动词,直接宾语,助动词,动原,冠词,名词,goat,the,eat,will,The,grey,wolf,句型分析一,18,分析:The grey wolf will eat the goat,句子,主语,谓语,冠词,形容词,名词,动词,直接宾语,助动词,动原,冠词,名词,goat,the,eat,will,The,grey,wolf,句型分析二,19,一个上下文无关文法 G= (VT,VN S, P ),其中: VT是一个非空有穷终结符号集合; VN是一个非空有穷的非终结符号集合, 且VTVN; S VN ,称为开始符号。 P是一个产生式的非空有穷集合,每个产 生式的形式是A(或A :),其中 AVN,(VTVN)*。开始符号S至必须在某个产生式的左部出现一次 。 缩写形式: A 1|2,一 文法的定义,20,G=(a,+,*,(,),, , ,P ) P: * ( ) a E E+T T T T*F F F ( E ) a (2.1),例2.2 算术表达式的文法G:,21,令G=(VT,VN,S,P), 若AP, 且,(VTVN)*,则称A直接推出,表示成 A A直接推出 直接归约到A 如果存在一个直接推导序列: 012 n(n0) 表示成 0 n 0 n 或者0=n或者0 n,+ ,+ ,* ,二. 定义2.3 直接推导和推导的定义,22,例:E E+T T+T F+T a+T a+F a+a,23,设文法 G(VT,VN,S,P)。如果S ,则称是一个句型。仅含终结符号的句型是一个句子。语言 L(G)是由文法G产生的所有句子所组成的集合: L(G)|S 且VT* 例2.3 考虑一个文法 G(a,b,S,S,P)其中P:SaSb ab SaSb aaSbb a3Sb3 an-1Sbn-1 anbn,* ,+ ,三. 定义2.4:语言的定义,24,设G=(VT=a,b,VN=S,A,B,S,P P由下列产生式组成:SaB|bA Aa|aS|bAA Bb|bS|aBB L(G)=w|wa,b+,且w中有相同个数的a和b。 用归纳法证明下面结论(对w的长度) : (1)S w,当且仅当w中含有相同个数的a和b。 (2)A w,当且仅当w中a的个数比b的个数多一个。 (3)B w,当且仅当w中b的个数比a的个数多一个。 归纳基础 当|w|=1,Aa, B b, 不能从S导出长度 为1的终极行,则上述结论显然成立。,*,*,*,例2.4,25,设(1),(2)和(3)对于长度不超过k-1的所有w都成立。那么,证明对|w|=k也成立。 对于(1),推导的第一步必是SaB或SbA, 对于第一种情形,必有w=aw1且B w1, |w1|=k-1, 它含的b个数比a多一个,因此,w中a,b的个数相等。推导的第一步是SbA,证明完全类似。反之, |w|=k, w中a,b的个数相等,要证S w。考虑的S推导,推导出的开始符号,或为a或为b。若 SaB,B w1, |w1|=k-1, w1中b的个数比a多一个,w= aw1。若S bA,证明和类SaB类似。 (2)和(3)的证明留给同学们。,*,*,*,归纳步骤,26,: 对于w和G, wL(G) 是否存在S w,如何构造 例如,GE(例2.2)和w=a+a a EE+T T+T F+T a+T a+TF a+F F a+a F a+aa( 最左) 特点:A (A) , VT* EE+T E+T F E+ T a E+Fa E+aa T+aa F+aa a+aa 特点:A (A), VT*(最右),+ ,四. 最左推导和最右推导,27,令GS是一个文法,如果有 S A 且A 则称是一个关于非终结符号A的,句型的短语。其次如果有 S A 且 A 则称是直接短语。一个句型的最左直接短语称为该句型的句柄。 文法(21)的一个句型 a1*a2+a3 ,尽管 有E a2a3 ,但是 a2a3 并不是该句型 的一个短语,因为不存在 E a1*E。 短语:a1,a2,a3,a1 *a2,a1*a2+a3 直接短语:a1,a2 ,a3 句柄:a1,+ ,* ,* ,+ ,+ ,定义2.5,28,2.3 分析树和二义性,一. 分析树的定义 二. 如何画出分析树 三. 子树 四. 二义性文法的定义 五. 在构造编译程序中如何处理 二义性文法,29,设G=(VT,VN,S,P),G的一棵分析树满足如下条件: 1. 每一个结点有一个标记,此标记是VTVN中的符号。2根的标记是S。3如果一个结点是内部结点,且有标记A,那么A必在VN中。 4如果编号为n的结点有标记A,结点n1,n2,nk是点n的从左到右的儿子,并分别有标记X1,X2,Xk,则AX1X2Xk必须是P中的产生式。5. 如果结点n有标记,那么结点n是叶子,且是它父亲唯一的儿子。,一.分析树的定义,30,G=(VT,VN,S,P), 其中 P: SaASa A SbA SS ba,3,1,2,4,6,5,7,8,9,10,11,S,a,A,S,S,b,A,a,a,b,a,例2.5,31,根据推导序列,对每步推导画相应分枝,A,S,a,S,b,S,A,a,a,b,a,aSbAS,aabAS,aabbaS,aabbaa,aAS,S,二. 如何画出分析树 (1.自顶向下),32,根据归约序列,对每步归约画相应分枝,A,S,a,S,b,S,A,a,a,b,a,aAa,aSbAa,aSbbaa,aabbaa,aAS,S,二. 如何画出分析树 (2.自底向上),33,1. 一个句型推导或分析用一棵树结构图示 出来,它反应了一个句子语法结构的层次。 2. 对于一个句子的多种推导(若文法是无二义性的),采用各种推导过程,画出的分析树是一样的。分析树并未描述推导过程。 3. 在书中,用画分析树的过程解释语法分析过程,用分析树图解语法结构。 分析树是推导的图形表示。,关于分析树的几点说明,34,一棵分析树中一个特有的结点连同它的全部后裔,连接这些后裔的边以及这些结点的标记。例如:,S,A,b,S,a,S,b,a,A,a,a,三. 子树,35,短语:一棵子树的所有叶子自左至右排列起来形成一个相对于子树根的短语。 直接短语:仅有父子两代的一棵子树,它的 所有叶子自左至右排列起来所形成的符号串。 句柄:一个句型的分析树中最左那棵只有父子两代的子树的所有叶子的自左至右排列。 例如,对表达式文法GE和句子a1+a2*a3,挑选出推导过程中产生的句型中的短语,直接短语,句柄。,用子树解释短语,直接短语,句柄:,36,E,E+T,T+T,F+T, a1+T, a1+T*F, a1+F * F, a1+a2 *F,E+T,T,T+T,F,F+T,a1, a1+T,a1, T*F, a1+T*F,a1, F,F*F, a1+F*F,a1, a2,a1+ a2 *F, a2 *F,a1, a2, a3, a2 * a3 a1+ a2 *a3,E,E,+,T,T,F,a1,T,*,F,F,a2,a3,a1+a2 *a3,短语,例(a),37,E,E+T,E+T*F,E+T*a3,E+F* a3,E+a2 * a3,T+a2 * a3,F+a2 * a3,E,E,+,T,T,F,a1,T,*,F,F,a2,a3,a1+a2 *a3,例(b),38,描述一个句子的文法不是唯一的; 2. 对于一个句子的分析应是唯一的。 考虑表达式下面的文法 GE,其产生式如下: EE+EE*E (E) a 对于句子a+a*a, 有如下两个最左推导: EE+E a+E a+E*E a+a*E a+a*a E E*E E+E*E a+E*E a+a*E a+a*a,四. 文法的二义性的定义,39,EE+E a+E a+E*E a+a*E a+a*a,E E*EE+E*E a+E*Ea+a*E a+a*a,E,E,+,E,E,*,E,a,a,a,E,E,*,E,+,E,E,a,a,a,最左推导,例(1),40,EE+E E+E*E E+E*a E+a*a a+a*a,E E*EE*a E+E*aE+a*a a+a*a,E,E,+,E,E,*,E,a,a,a,E,E,*,E,+,E,E,a,a,a,最右推导,例(2),41,如果一个文法的句子存在两棵分析树,那磨,该句子是二义性的。如果一个文法包含二义性的句子,则称这个文法是二义性的; 否 则,该文法是无二义性的。几点说明: 1 . 一般来说,程序语言存在无二义性文法, 对于表达式来说,文法(2 .1)是无二义性的。对于条件语句,经常使用二义性文法描述它:S if expr then S if expr then S else S other 二义性的句子: if e1 then if e2 then s1 else s2,四. 二义性(歧义性,ambiquity)的定义:,42,下面是 Smathed_s unmathed_s mathed_s if expr then mathed_s else mathed_s other unmathed_s if expr then S if expr then mathed_s else unmathed_s 它显然比较复杂,因此: 2. 在能驾驭的情况下,使用二义性文法。,描述if语句的无二义性文法的产生式:,43,3. 对于任意一个上下文无关文法,不存在 一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的。 4. 存在先天二义性语言。例如, aibicji,j1 aibjcji,j1 存在一个二义性的句子akbkck。 压缩过的文法(化简了的文法): 1形式的产生式: AA P ; 2. 每个非终结符号A必须都有用处。即, S A 且 A ,VT*,*,+,定义之3,4,44,2.4 形式语言概观,2.4. 1 文法分类 2.4. 2 非上下文无关文法的语言结构 2.4. 3 上下文无关语言和正规语言的区别,45,逐渐对产生式施加限制 四种类型: 0型,1型,2型,3型 0型:G=(VT,VN,S,P) 规则形式 : , (VTVN)*, 推导: 1型(上下文有关) : 规则形式 : A A VN, ,. (VTVN)*, 2型(上下文无关):规则形式 : A A VN, (VTVN)* 3型(右线性): A aB A a (左线性) A Ba A a a VT,2.4.1 文法分类,46,在我们使用的程序语言中,有些语言结构并不是总能用上下文无关文法描述的。 例2.9 L1=wcw|wa,b+。例如,aabcaab就是L1的一个句子。这个语言是检查程序中标识符的声明应先于引用的抽象 。 例2.10 L2=anbmcndm|n,m0,它是检查过程声明的形参个数和过程引用的参数个数一致问题的抽象。,2.4.2非上下文无关的语言结构,47,语言中过程定义和引用的语法并不涉及到参数个数,例如,Pascal的过程语句可描述为 s-c

温馨提示

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

评论

0/150

提交评论