编译原理第六章习题答案课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《编译原理第六章习题答案课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 第六 习题 答案 课件
- 资源描述:
-
1、上一页下一页2本章的主要内容本章的主要内容 属性文法和语法制导的翻译的概念 综合属性和继承属性的概念、特点 S-属性文法与L-属性文法的概念及分析方法 翻译模式 递归下降翻译器的设计上一页下一页3本章要求本章要求 知识点:语法制导定义,S-属性定义及其自底向上计算属性,L-属性定义,自顶向下的翻译,自底向上计算继承属性。深刻理解:属性,综合属性,继承属性,依赖图,计算顺序,语法树,语法制导定义,S-属性文法定义,L-属性文法定义,翻译模式。熟练掌握:对于已知文法G和翻译任务,构造其L-属性定义,将其改造成适于自顶向下分析或自底向上分析的翻译模式。上一页下一页4本章教学线索本章教学线索1 属性文
2、法(属性翻译文法)属性文法(属性翻译文法)1.1 属性文法的概念 1.2 属性的分类 1.3 属性的计算规则2 基于属性文法的处理办法基于属性文法的处理办法3 S-S-属性文法的自下而上计算属性文法的自下而上计算4 L-L-属性文法和自顶向下翻译属性文法和自顶向下翻译5 自下而上计算继承属性自下而上计算继承属性上一页下一页51 属性文法(属性翻译文法)属性文法(属性翻译文法)语法制导翻译:通过给语法树上各个符号赋予一定的含义并且将各个符号进行有结构的连接,可以形成语言的具体语句的含义。这给予我们以启示:可以通过扩充文法,在文法符号上附着某些语义信息,并在这些语义信息间建立相互计算关系,从而在语
3、法分析的同时进行语义分析。由于这种分析是在语法分析的控制下进行的,故称为语法制导翻译。上一页下一页61.1 属性文法的概念属性文法的概念(1)属性文法的定义 在上下文无关文法的基础上,为每个文法符号(终结符和非终结符)配备若干相关的“值”(也称:“属性”),对于文法的每个产生式都配备了一组属性的计算规则(语义规则),这种文法称为属性文法。1968年,Knuth首先提出。说明:在一般情况下,整个属性文法是非常复杂的。但属性的函数关系却通常非常简单。属性也很少依赖于大量的其它属性,因此可以将相互依赖的属性分割成较小的独立属性集,然后单独对每一属性集写出一个属性文法。上一页下一页7(2)属性(Att
4、ribute)是编程语言结构的任意特性。属性在其包含的信息和复杂性等方面变化很大。属性的典型例子有:变量的数据类型 表达式的值 存储器中变量的位置 程序的目标代码 数的有效位数(3)属性文法一般表示方法:上一页下一页8例6.1 一个简单台式计算器的属性文法上一页下一页9例:无符号整数的属性文法上一页下一页101.2 属性的分类属性的分类例6.3 属性文法为例中的属性文法,输入:3*5+4ndigitlexval:=3Fval:=3Tval:=3digitlexval:=5Fval:=5Tval:=15*Eval:=15+digitlexval:=4Fval:=4Tval:=4Eval:=19L
5、n 综合属性:用于自下而上传递信息;在语法树中,一个结点的综合属性由其子结点的属性值确定,因此,通常使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值。仅仅使用综合属性的属性文法称S-属性文法。继承属性:用于自上而下传递信息;在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。上一页下一页11例6.4 继承属性的类型说明文法DT.type=realrealL.in=realL.in=real,id3L.in=real,id2id1real id1,id2,id3上一页下一页121.3 属性的计算规则属性的计算规则属性的计算规则:设有产生式A定义 b=f(c1,
6、c2,ck)f是一个计算函数,并且(1)b是A的一个综合属性,并且c1,c2,ck是产生式右边文法符号的属性。或者:(2)b是产生式右边某文法符号的一个继承属性,并且c1,c2,ck是A或产生式右边任何文法符号的属性。上一页下一页13注意:如果同一文法符号在文法规则中出现不止一次,那么每次必须用合适的下标与在其他地方出现的符号区分开来。终结符只有综合属性,它们由词法分析器提供。非终结符既可有综合属性也可有继承属性,文法开始符的所有继承属性为属性计算前的初始值。属性计算规则中仅能使用相应产生式中文法符号的属性(封装性)。产生式左边的继承属性和产生式右边的文法符号的综合属性由其它产生式的属性规则计
7、算。一个句型的语法树可以加以扩充,用来表示句型分析中得到的各个符号的属性间的关系:u语法树中,一个结点的综合属性的值由其子结点的属性值确定u语法树中,一个结点的继承属性的值由该结点的父结点和(或)兄弟结点的某些属性值确定上一页下一页14本章教学线索本章教学线索1 属性文法(属性翻译文法)属性文法(属性翻译文法)2 基于属性文法的处理办法基于属性文法的处理办法 2.1 语法制导翻译 依赖图 2.3 树遍历的属性计算方法 一一遍扫描的处理办法 2.5 抽象语法树(Abstract Syntax tree)3 S-S-属性文法的自下而上计算属性文法的自下而上计算4 L-L-属性文法和自顶向下翻译属性
8、文法和自顶向下翻译5 自下而上计算继承属性自下而上计算继承属性上一页下一页15 语法制导翻译语法制导翻译 基于属性文法的处理过程通常是:对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法树,并在语法树的各结点处按语义规则进行计算。输入串分析树依赖图语义规则的计算图6.1 语法制导翻译的概观 在具体实现时,一般都是随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译。也就是语义分析是伴随语法分析的过程进行。上一页下一页162.2 依赖图依赖图a依赖图:一种有向图,在一颗语法树中表示结点的继承属性和综合属性之间的相互依赖关系(这种属性之间的依赖关系由文法的语义规则确定)。b
9、依赖图的构造方法:for 语法树中每一结点n do for 结点n的文法符号的每一个属性a do 为a在依赖图中建立一个结点;for 语法树中每一个结点n do for 结点n所有产生式对应的每一条语义规则 bf(c1,c2,ck)do for i1 to k do 从结点ci到结点b构造一条有向边;注意:如果属性文法不存在属性之间循环的依赖关系,那么称该文法为良定义。bC1C2Ck-1Ck上一页下一页17例6.5 EE1+E2 E.val=E1.val+E2.val E.valE1.valE2.valDTrealLL,id3L,id2id14typein 5in 7in 910861 ent
10、ry3 entry2 entry例中带继承属性文法对于real id1,id2,id3上一页下一页18c属性的计算顺序l拓扑排序一个有向非循环图的拓扑排序是图中结点的任何顺序m1,m2,mk,使得边必须是从序列中前面的结点指向后面的结点,也就是说,如果mimj是mi到mj的一条边,那么在序列中mi必须出现在mj前面。若依赖图中无环(属性之间没有循环依赖关系),则存在一个拓扑排序,它就是属性值的计算顺序。l计算语义规则的方法 1)分析树法:输入串分析树依赖图计算次序 2)基于规则的方法:在构造编译器时,用手工或专门的工具来分析语义规则,确定属性值的计算顺序。3)忽略语义规则的方法:在语法分析过程
11、中翻译,那么计算顺序由分析方法来确定而表面上与语义规则无关。实际上,要求限制语法制导定义,使属性值的计算顺序能和语法分析过程同步进行。上一页下一页192.3 树遍历的属性计算方法树遍历的属性计算方法前提:1)假设语法树已经建立 2)且树中已带有开始符号的继承属性和终结符的综合属性;方法:深度优先,从左到右进行(也是一种分析树的方法)具体算法:While 还有未被计算的属性 do VisitNode(S)/S是开始符号Procedure VisitNode(N:Node);begin if NVN then /假设它的产生式NX1Xmfor i=1 to m do if XiVN then be
12、gin 计算计算Xi的所有能够计算的继承属性;的所有能够计算的继承属性;VisitNode(Xi);end;计算计算N的所有能够计算的综合属性;的所有能够计算的综合属性;end例子:6.6 P143 上一页下一页202.4 一遍扫描的处理办法一遍扫描的处理办法 在语法分析的同时计算属性值,无需构造实际的语法树;这种方法同下面两个因素有关:所采用的语法分析方法 属性的计算次序 使用一遍扫描的语义分析方法,就是为文法中的每个产生式配上一组语义规则,并且在语法分析的同时执行这些语义规则。在自上而下的分析中就是在产生式匹配输入串成功,或者在自下而上的分析中,当一个产生式被用于进行规约时,此产生式相应的
13、语义规则就被计算,完成有关的语义分析和代码产生的工作。语法分析过程中完成翻译有许多优点,但也有一些不足:u适于语法分析的文法可能不完全反映语言成分的自然层次结构;u语法分析方法限制,对语法树结点的访问次序和翻译需要的访问次序不一致。上一页下一页212.5 抽象语法树抽象语法树(Abstract Syntax tree)(1)表示程序层次结构的树,它把分析树中对语义无关紧要的成分去掉,是语法树的抽象形式,也称作语法结构树,或结构树。抽象语法树是常用的一种中间表示形式。(2)在抽象语法树中,运算符号和关键字都不在叶结点,而是在内部结点中出现。产生式Sif B then S1 else S2 赋值语
14、句的语法树if-then-else assignment|B S1 S2 variable expression (3)建立表达式的抽象语法树 建立表达式的抽象语法树使用的函数 1)mknode(op,left,right)建立一个运算符号结点,标号是op,两个域left和right指向运算分量结点的指针。2)mkleaf(id,entry)建立一个标识符结点,由标号id标识,一个域entry指向标识符符号表中相应的项。3)mkleaf(num,val)建立一个数结点,标号为num,域val用于存放数的值。返回新建立结点的指针。上一页下一页22 产生式 语义规则 EE1+T E.nptr:=m
15、knode(+,E1.nptr,T.nptr)E E1-T E.nptr:=mknode(-,E1.nptr,T.nptr)E T T id T.nptr:=mkleaf(id,id.entry)T num T.nptr:=mkleaf(num,num.val)idto entry anum 4 idto entry c +a-4+c的语法树上一页下一页23本章教学线索本章教学线索1 属性文法(属性翻译文法)属性文法(属性翻译文法)2 基于属性文法的处理办法基于属性文法的处理办法3 S-S-属性文法的自下而上计算属性文法的自下而上计算4 L-L-属性文法和自顶向下翻译属性文法和自顶向下翻译5
16、自下而上计算继承属性自下而上计算继承属性上一页下一页243 S-属性文法的自下而上计算属性文法的自下而上计算s-属性文法:只含有综合属性s-属性文法通常借助于LR分析器来实现,在分析栈中使用一个附加的域来存放文法符号的综合属性值。stateval.ZZ.zY.Y.y.XX.ztop一个带有综合属性值域的分析栈A b=f(c1,c2,ck)b是A的综合属性,ci(1 ik)是中符号的属性。综合属性的值在自底向上的分析过程中,每步归约时,计算相应的属性值。上一页下一页25例如:AXYZ Aa f(Xx,Yy,Zz)Aa X x Y y Z z X X.xY Y.yZ Z.z A A.astate
展开阅读全文