《北大编译原理》PPT课件.ppt
《《北大编译原理》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《北大编译原理》PPT课件.ppt(766页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3编译程序目标程序源程序把高级语言程序翻译成等价的低级语言程序。编译系统:编译程序和运行程序编译程序的功能4词法分析语法分析语义分析中间代码生成优化目标代码生成目标代码源程序符号表管理错误诊查处理3编译程序的逻辑结构5源程序bbPROGRAMm;bbVARa,b,c:real;bbBEGINbbread(b,c);bba:=b+c*60;bbwrite(a)bbEND.6 经词法分析源程序被加工成单词流bb mbb,abb,:bb,;bb.,abb,+bb,60bb,.7赋值语句变量:=表达式表达式+项项因子b项*因子因子c60a赋值语句经语法分析生成分析树8:=a+b*cinttoreal6
2、0赋值语句经语义分析生成语法树9 生成中间代码bbtemp1:=inttoreal(60);bbtemp2:=c*temp1;bbtemp3:=b+temp2;bba:=temp3;10优化Temp1:=c*60.0a:=b+temp1生成目标代码movfc,r2;mulf#60.0,r2;movfb,r1;addfr2,r1;movfr1,a;11 符号表12 错误的诊查处理bb编译程序在各个阶段应诊断和报告源程序中的错误,包括词法错误,语法错误,语义错误。bb编译程序应报告出错地点,并给出简明准确的提示信息。13编译程序(器)的组织bb前端和后端 bb源程序源程序 中间代码中间代码 目标代
3、码目标代码 bb仅依赖源程序仅依赖源程序 仅依赖目标计算机仅依赖目标计算机bb遍(PASS):对输入文件(源程序或其等价对输入文件(源程序或其等价的中间形式)从头到尾扫视,完成预定的处的中间形式)从头到尾扫视,完成预定的处理。理。遍输入文件输出文件前端后端14词法分析语法分析语义分析和中间代码生成源程序中间代码符号表管理错误的诊查处理把前端组织成一遍扫描15设计编译程序应首先研究的问题bb首先研究源程序的语法和语义及运行模型,源是设计编译程序的出发点。bb研究目标计算机,设计目标代码的指令系统,它是由目标计算机扩充而成,扩充后的计算机称作抽象计算机。目前的通用计算机往往和源语言执行模型不一致。
4、通用计算机往往和源语言执行模型不一致。编译程序源程序目标程序抽象目标16 教和学的几个问题bb重要性:处理字符串的一般方法;构造大程序的方法;实用;研究课题:新的语言及实现技术;并行编译技术。bb学习方法:(1)源程序是源泉;(2)把每个阶段放到整个编译程序背景中学习;(3)认真做作业。bb每周有一次答疑。bb参与网上教材的修改与创新。17教材和参考书bb教材:bb(1)编译程序设计原理北京大学出版社,北京大学出版社,杜淑敏等编著。杜淑敏等编著。bb(2)网络版(软件工程中心资助)。(软件工程中心资助)。18bb(1)编译原理,清华大学出版社,吕映芝清华大学出版社,吕映芝等编著等编著,1998
5、1998。bb(2)程序设计语言程序设计语言编译原理,国防工业出国防工业出版社,陈火旺等编著,版社,陈火旺等编著,19841984。bb(3)AlfredV.Aho,RaviSethiAlfredV.Aho,RaviSethiJeffreyDJeffreyD.Ullman.Ullman,Compilers:Principles,Techniques,andTools,Addison-Wesly,1986。bb(4)ModernCompilerImplementationinC,AndrewW.AppelandMaiaGinsburg,199819参考书1920学习本章的目的bb构造编译程序的算
6、法是从研究源程序及目标程序产生的,首先找到源语言的形式描述,根据这种描述,构造出相应的分析加工程序。bb语言分语法,语义和语用。程序语言语法的形式描述是很好用的,语义的形式描述不那磨好用,但它推动语言理论的发展。21bb2.1.1字母表bb2.1.2符号串一.符号串的定义bb二.术语bb三.符号串的运算bb四.符号串集合的运算2.1符号串22 字母表是符号的非空有穷集合。任何程序语言都有自己的字母表,例如:1.计算机语言:由符号“0”和“1”组成的字 母表,=0,1 2.ASCII字符集;3.Pascal字母表为:=AZ,az,09,+,-,*,/,:,;,.,,(,),字母表23一.符号串的
7、定义(1)是上的一个符号串。(2)若x是上的符号串,而a是的元素,则xa是上的符号串。(3)y是上的符号串,当且仅当它由(1)和 (2)导出。由字母表中的符号所组成的的任何有穷 序列被称之为该字母表上的符号串,也称作字。符号串24 设s是符号串前缀:移走s的尾部的零个或多于零个符号后缀:删去s的头部的零个或多于零个符号子串:从s中删去一个前缀和一个后缀子序列:从s中删去零个或多于零个符号(这些符号不要求是连续的)逆转(用SR表示):将S中的符号按相反次序写出而得到的符号串。长度:是该符号串中的符号的数目。例如|aab|=3,|=0。二术语25 :符号串s=banana前缀:,b,ba,ban,
8、bana,banan,banana后缀:banana,anana,nana,ana,na,a,子串:banana,anana,banan,anan,真前缀,真后缀,真子串:xsx 子序列:baa(这些符号不要求是连续的)逆转(用SR表示):ananab长度:banana=6例261.连接:设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,.三.符号串的运算27 设L和M是两个符号串集合,则 1.合并:
9、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+LL*)L+Li(i=1)=L1L2L3L4四.符号串集合(语言)的运算28如:L=AZ,azD=091LD=AZ,az,092LD是由所有用一个字母后跟一个数字 组成的符号串所构成的集合。3L4是由所有的四个字母的符号串构的集合。4L(LD)*是由所有的字母打头的字母和数字组成的符号串所构成的集合.5D+是由所有的长度大于等于1的数字串所构成的集合.例292.2
10、文法和语言的定义bb2.2.1引子bb2.2.2文法和语言的定义bb一.文法和语言的定义bb二.推导bb三.语言bb四.最左推导和最右推导bb五。短语,直接短语,句柄30 引子分析:Thegreywolfwilleatthegoat谓语主语冠词形容词名词动词直接宾语助动词句子动原冠词名词Thegreywolfwilleatthegoat31为了进行机械分析,:“句子由主语后跟随谓语组成”表示为:句子主语谓语(1)主语冠词形容词名词(2)冠词the形容词grey谓语动词直接宾语(5)动词助动词动词原形(6)助动词will动词原形eat直接宾语冠词名词(9)名词wolf名词goat语法规则32 :
11、终结符号集,非终结符号集,语法规则,开始符号。终结符号集VT=the,grey,wolf,will,eat,goat非终结符号集VN=句子,主语,谓语,冠词,形容词,名词,动词,直接宾语,助动词,动词原形语法规则集P=句子主语谓语,开始符号S=句子句子的语法有四部分33句子主语谓语冠词形容词名词谓语the形容词名词谓语thegrey名词谓语thegreywolf谓语thegreywolf动词直接宾语.thegreywolfwilleatthegoat句子根据规则推导出来34句子thegreywolfwilleatthegoatthegreywolfwilleatthewolfthegreygo
12、atwilleatthewolfthegreygoatwilleatthegrey合符语法且合符语义的句子仅是:thegreywolfwilleatthegoat+句子既要合符语法又要合符语义35分析:Thegreywolfwilleatthegoat句子主语谓语冠词形容词名词动词直接宾语助动词动原冠词名词goattheeatwillThegreywolf句型分析一36分析:Thegreywolfwilleatthegoat句子主语谓语冠词形容词名词动词直接宾语助动词动原冠词名词goattheeatwillThegreywolf句型分析二37 一个上下文无关文法 G=(VT,VN S,P),其
13、中:VT是一个非空有穷终结符号集合;VN是一个非空有穷的非终结符号集合,且VTVN;S VN,称为开始符号。P是一个产生式的非空有穷集合,每个产 生式的形式是A(或A:),其中 AVN,(VTVN)*。开始符号S至必须在某个产生式的左部出现一次。缩写形式:A 1|2一 文法的定义38G=(a,+,*,(,),,P)P:*()aEE+TTTT*FFF(E)a(2.1)例2.2算术表达式的文法G:39令G=(VT,VN,S,P),若AP,且,(VTVN)*,则称A直接推出,表示成AA直接推出直接归约到A 如果存在一个直接推导序列:012 n(n0)表示成 0 n 0 n 或者0=n或者0 n+*二
14、.定义2.3 直接推导和推导的定义40例:EE+TT+TF+Ta+Ta+Fa+a41设文法 G(VT,VN,S,P)。如果S ,则称是一个句型。仅含终结符号的句型是一个句子。语言 L(G)是由文法G产生的所有句子所组成的集合:L(G)|S 且VT*例2.3 考虑一个文法 G(a,b,S,S,P)其中P:SaSbabSaSbaaSbba3Sb3an-1Sbn-1anbn*+三.定义2.4:语言的定义42 设G=(VT=a,b,VN=S,A,B,S,P P由下列产生式组成:SaB|bA Aa|aS|bAABb|bS|aBBL(G)=w|wa,b+,且w中有相同个数的a和b。用归纳法证明下面结论(对
15、w的长度):(1)S w,当且仅当w中含有相同个数的a和b。(2)A w,当且仅当w中a的个数比b的个数多一个。(3)B w,当且仅当w中b的个数比a的个数多一个。归纳基础归纳基础 当|w|=1,Aa,Bb,不能从S导出长度为1的终极行,则上述结论显然成立。*例2.443 设(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的个数相等,要证
16、S w。考虑的S推导,推导出的开始符号,或为a或为b。若SaB,B w1,|w1|=k-1,w1中b的个数比a多一个,w=aw1。若S bA,证明和类SaB类似。(2)和(3)的证明留给同学们。*归纳步骤:归纳步骤:44:对于w和G,wL(G)是否存在Sw,如何构造例如,GE(例2.2)和w=a+aaEE+TT+TF+Ta+Ta+TFa+FFa+aFa+aa(最左)特点:A(A),VT*EE+TE+TFE+TaE+FaE+aaT+aaF+aaa+aa特点:A(A),VT*(最右)+四.最左推导和最右推导45 令GS是一个文法,如果有 S A 且A 则称是一个关于非终结符号A的,句型的短语。其次
17、如果有 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.5462.3 分析树和二义性bb一.分析树的定义bb二.如何画出分析树bb三.子树bb四.二义性文法的定义bb五.在构造编译程序中如何处理 二义性文法47 设G=(VT,VN,S,P),G的一棵分析树满足如下条件:1.每一个结点有一个标记,此标记是VTVN中的符号。2根的标记是S。3如果
18、一个结点是内部结点,且有标记A,那么A 必在VN中。4如果编号为n的结点有标记A,结点n1,n2,nk是点n的从左到右的儿子,并分别有标记X1,X2,Xk,则AX1X2Xk必须是P中的产生式5.如果结点n有标记,那么结点n是叶子,且 是它父亲唯一的儿子。一.分析树的定义48例2.5G=(VT,VN,S,P),其中P:SaASaASbASSba3124657891011SaASSbAaaba49根据推导序列,对每步推导画相应分枝ASaSbSAaabaaSbASaabASaabbaSaabbaaaASS二.如何画出分析树 (1.自顶向下)50根据归约序列,对每步归约画相应分枝ASaSbSAaaba
19、aAaaSbAaaSbbaaaabbaaaASS二.如何画出分析树 (2.自底向上)511.一个句型推导或分析用一棵树结构图示出来,它反应了一个句子语法结构的层次。2.对于一个句子的多种推导(若文法是无二义性的),采用各种推导过程,画出的分析树是一样的。分析树并未描述推导过程。3.在书中,用画分析树的过程解释语法分析过程,用分析树图解语法结构。分析树是推导的图形表示。关于分析树的几点说明52一棵分析树中一个特有的结点连同它的全部后裔,连接这些后裔的边以及这些结点的标记。例如:SAbSaSbaAaa三.子树53短语:一棵子树的所有叶子自左至右排列起来形成一个相对于子树根的短语。直接短语:仅有父子
20、两代的一棵子树,它的所有叶子自左至右排列起来所形成的符号串。句柄:一个句型的分析树中最左那棵只有父子两代的子树的所有叶子的自左至右排列。例如,对表达式文法GE和句子a1+a2*a3,挑选出推导过程中产生的句型中的短语,直接短语,句柄。用子树解释短语,直接短语,句柄:54EE+TT+TF+Ta1+Ta1+T*Fa1+F*Fa1+a2*FE+TT,T+TF,F+Ta1,a1+Ta1,T*F,a1+T*Fa1,F,F*F,a1+F*Fa1,a2,a1+a2*F,a2*Fa1,a2,a3,a2*a3a1+a2*a3EE+TTFa1T*FFa2a3a1+a2*a3短语例例(a)a)55EE+TE+T*F
21、E+T*a3E+F*a3E+a2*a3T+a2*a3F+a2*a3EE+TTFa1T*FFa2a3a1+a2*a3例例(b)b)561.描述一个句子的文法不是唯一的;2.2.对于一个句子的分析应是唯一的。考虑表达式下面的文法GE,其产生式如下:EE+EE*E(E)a对于句子a+a*a,有如下两个最左推导:EE+Ea+Ea+E*Ea+a*Ea+a*aEE*EE+E*Ea+E*Ea+a*Ea+a*a 四.文法的二义性的定义57EE+Ea+Ea+E*Ea+a*Ea+a*aEE*EE+E*Ea+E*Ea+a*Ea+a*aEE+EE*EaaaEE*E+EEaaa最左推导例例(1(1)58EE+EE+E*
22、EE+E*aE+a*aa+a*aEE*EE*aE+E*aE+a*aa+a*aEE+EE*EaaaEE*E+EEaaa最右推导例例(2(2)59如果一个文法的句子存在两棵分析树,那磨,该句子是二义性的。如果一个文法包含二义性的句子,则称这个文法是二义性的;否则,该文法是无二义性的。几点说明:1.一般来说,程序语言存在无二义性文法,对于表达式来说,文法(2.1)是无二义性的。对于条件语句,经常使用二义性文法描述它:SifexprthenSifexprthenSelseSother二义性的句子:ife1thenife2thens1elses2四.二义性(歧义性,ambiquity)的定义:60下面是
23、Smathed_sunmathed_smathed_sifexprthenmathed_selsemathed_sotherunmathed_sifexprthenSifexprthenmathed_selseunmathed_s它显然比较复杂,因此:2.在能驾驭的情况下,使用二义性文法。描述if语句的无二义性文法的产生式:613.对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的。4.存在先天二义性语言。例如,aibicji,j1aibjcji,j1存在一个二义性的句子akbkck。压缩过的文法(化简了的文法):压缩过的文
24、法(化简了的文法):1形式的产生式:AAP;2.每个非终结符号A必须都有用处。即,SA且A,VT*+622.4形式语言概观bb2.4.1文法分类bb2.4.2非上下文无关文法的语言结构bb2.4.3上下文无关语言和正规语言的区别63逐渐对产生式施加限制四种类型:0型,1型,2型,3型0型:G=(VT,VN,S,P)规则形式:,(VTVN)*,推导:1型(上下文有关):规则形式:AAVN,.(VTVN)*,2型(上下文无关):规则形式:AAVN,(VTVN)*3型(右线性):AaBAa(左线性)ABaAaaVT 文法分类64在我们使用的程序语言中,有些语言结构并不是总能用上下文无关文法描述的。例
25、例2.92.9L1=wcw|wa,b+。例如,aabcaab就是L1的一个句子。这个语言是检查程序中标识符的声明应先于引用的抽象。例例2.102.10L2=anbmcndm|n,m0,它是检查过程声明的形参个数和过程引用的参数个数一致问题的抽象。2.4.2非上下文无关的语言结构非上下文无关的语言结构65语言中过程定义和引用的语法并不涉及到参数个数,例如,Pascal的过程语句可描述为s-callid(r-list)r-listr-list,r|r实参和形参个数的一致性检查也是放在语义分析阶段完成的。定义定义2.72.7如果一个上下文无关文法G中存在具有下列特征的非终结符A:AA其中,VTVN+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北大编译原理 北大 编译 原理 PPT 课件
限制150内