编译原理ppt课件

上传人:夏** 文档编号:567685807 上传时间:2024-07-22 格式:PPT 页数:25 大小:894KB
返回 下载 相关 举报
编译原理ppt课件_第1页
第1页 / 共25页
编译原理ppt课件_第2页
第2页 / 共25页
编译原理ppt课件_第3页
第3页 / 共25页
编译原理ppt课件_第4页
第4页 / 共25页
编译原理ppt课件_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《编译原理ppt课件》由会员分享,可在线阅读,更多相关《编译原理ppt课件(25页珍藏版)》请在金锄头文库上搜索。

1、语法制导翻译语法制导翻译语法制导翻译语法制导翻译F静静态语义分析分析F这一步才真正开始考一步才真正开始考虑程序程序设计语言的言的实际意意义F静静态语义分析的作用:分析的作用:检查出源程序中的静出源程序中的静态语义错误 并且将并且将语义正确的正确的语句翻句翻译成中成中间代代码F该过程中通常使用的方法是程中通常使用的方法是语法制法制导翻翻译1第四章第四章第四章第四章 语法制导翻译生成中间代码语法制导翻译生成中间代码语法制导翻译生成中间代码语法制导翻译生成中间代码语法制导翻译是处理语义的基本方法,它以语法分析为基础,在语法分析得到语言结构的结果时,对附着于此结构的语义进行处理,如计算表达式的值、生成

2、中间代码等。主要内容包括:1.语法制导翻译的基本概念2.中间代码简介3.符号表简介4.典型声明语句与可执行语句的翻译24.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介F语法与法与语义1.语法与语义的关系语法是指语言的结构、即语言的“样子”;语义是指附着于语言结构上的实际含意 ,即语言的“意义”。语义不能离开语法独立存在;语义远比语法复杂;同一语言结构可包含多种含意,不同语言结构可表示相同含意;语法与语义之间没有明确的界线。例1 猫吃老鼠与老鼠吃猫,晒被子与晒太阳(语法正确不一定语义正确)34.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻

3、译简介2.语义分析的两个作用检查是否结构正确的句子所表示的意思也合法;执行规定的语义动作,如:表达式求值符号表填写中间代码生成等3.语义分析的方法语法制导翻译基本思想:将语言结构的语义以属性的形式赋予代表此结构的文法符号,而属性的计算以语义规则的形式赋予由文法符号组成的产生式,在语法分析推导或者规约的每一步骤中,通过语义规则实现对属性的计算。44.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介F属性与属性与语义规则 1.语法制导翻译的基本思想 为每个产生式配上语义规则并且在适当的时候执行这些规则具体方法:将文法符号所代表的语言结构的意思,用附着于该文法符号的属性属

4、性表示;用语义规则规定产生式所代表的语言结构之间的关系(即属性之间的关系),即用语义规则实现属性计算。语义规则的执行:在语法分析的适当时刻(如推导或归约)执行附着在对应产生式上的语义规则,以实现对语言结构语义的处理,如计算、查填符号表、生成中间代码、发布出错信息等。54.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介2.属性的表示 .attr 如:E.val(值),E.type(类型),E.code(代码序列), E.place(存储空间) 属性在程序设计中的具体表示可以根据实际情况采用适当 的数据结构或者程序代码来实现3.语义规则定义定定义4.1 对于产生式A,

5、其中是由文法符号X1X2.Xn组成的序列,它的语义规则可以表示为(4.1)所示关于属性的函数:b := f(c1, c2, ., ck)(4.1)64.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介A 的语义规则 b := f(c1, c2, ., ck)(4.1)语义规则中的属性存在下述性质与关系。若b是A的属性,c1, c2, ., ck是中文法符号的属性,或者A的其它属性,则称b是A的综合属性合属性。若b是中某文法符号Xi的属性,c1, c2, ., ck是A的属性,或者是中其它文法符号的属性,则称b是Xi的继承属性承属性。称(4.1)中属性b依依赖于于属性

6、c1, c2, ., ck。若语义规则的形式如下述(4.2),则可将其想像为产生式左部文法符号A的一个虚虚拟属性属性。属性之间的依赖关系,在虚拟属性上依然存在。f(c1, c2, ., ck)(4.2) (4.1)中属性之间的依赖关系,实质上反映了属性反映了属性计算的先后次算的先后次序序,即所有属性ci被计算之后才能计算属性b。74.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介F语义规则的两种形式的两种形式1.语法制导定义用抽象抽象属性和运算符号表示的语义规则2.翻译方案用具体具体属性和运算表示的语义规则 语义规则也被习惯上称为语义动作。二者作用等价,语法制导定

7、义适用于设计阶段段,翻译方案适用于实现阶段段。84.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介例4.1 将中缀形式的算术表达式转换为后缀表示。其语法制导定义和翻译方案可分别表示如下。其中print(E.post)是L的虚拟属性,即L.p := print(E.post)。翻译方案中的.lexval表示词法分析返回的记号num的值。产生式产生式语法制导定义语法制导定义翻译方案翻译方案L Eprint(E.post)print_post(post);E E1 + E2E.post := E1.post | E2.post | +;post(k) := +;k :=

8、 k+1;E numE.post := num.lexval;post(k) := lexval;k := k+1;94.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介产生式产生式语法制导定义语法制导定义翻译方案翻译方案L Eprint(E.post)print_post(post);E E1 + E2E.post := E1.post | E2.post | +;post(k) := +;k := k+1;E numE.post := num.lexval;post(k) := lexval;k := k+1; 语法制导定义只考虑“做什么” .post表示表达式

9、的后缀式 |表示后缀式的连接 属性和运算的具体实现细节不在语法制导定义的考虑范围104.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介产生式产生式语法制导定义语法制导定义翻译方案翻译方案L Eprint(E.post)print_post(post);E E1 + E2E.post := E1.post | E2.post | +;post(k) := +;k := k+1;E numE.post := num.lexval;post(k) := lexval;k := k+1; 翻译方案不但考虑做什么还要考虑如何做 例子中用数组post存放表达式的后缀形式 由n

10、um归约得到的子表达式E的后缀式就是它自身 归约由两个子表达式和加号组成的表达式时,两个子 表达式以分析过,已经分别按从左到右的顺序放在post中, 此时仅需将+添加到post中114.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介F从某种意义上来说,语法制导定义类似于算法,而翻译方案类似于程序F由于翻译方案与具体的实现密切相关,因此不同实现方法可以达到相同的目的(不唯一)产生式产生式语法制导定义语法制导定义翻译方案翻译方案1翻译方案翻译方案2L Eprint(E.post)print_post(post);E E1 + E2E.post := E1.post |

11、 E2.post | +;post(k) := +;k := k+1;print(+);E numE.post := num.lexval;post(k) := lexval;k := k+1;print(lexval);另一种翻译方案:无需存放中间过程,直接在分析的过程中输出表达式的后缀形式。原因:自下而上分析过程是对表达式分析树的一次后续遍历,而遍历次序与表达式的后缀表示正好一致。124.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介翻译方案中需要考虑的问题:采用什么样的语法分析方法,不同的分析方法对语义处理的次序不同为属性分配存储空间考虑计算次序翻译方案1,

12、自下而上计算,LR分析。以3+5+8为例,归约时翻译。产生式产生式翻译方案翻译方案1L Eprint_post(post);E E1 + E2 post(k) := +; k := k+1;E numpost(k) := lexval; k := k+1;post:(3 5 + 8 +)134.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介3.属性作为分析树的注释将属性附着在分析树对应文法符号上,形成注注释分析分析树。例4.2 3+5+8的分析树和注释分析树:产生式产生式语法制导定义语法制导定义翻译方案翻译方案2L Eprint(E.post)E E1 + E2E

13、.post := E1.post | E2.post | +;print(+);E numE.post := num.lexval;print(lexval);.post=3.post=5.post=8.post=35+.post=35+8+(print(35+8+)144.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介4.注释分析树上看继承属性与综合属性 继承属性是自上而下计算的综合属性是自下而上计算的提醒:除非特别提醒,本章讨论的语法制导翻译是综合属性合属性。.post=3.post=5.post=8.post=35+.post=35+8+(print(35+

14、8+)154.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介FLR分析翻分析翻译方案的方案的设计LR分析中的语法制导翻译实质上是对LR语法分析的扩充:扩充充LR分析器的功能分析器的功能:当执行归约产生式的动作时,也执行产生式对应的语义动作。由于是归约时执行语义动作,限制语义动作仅能放在产生式右部的最右边;扩充分析充分析栈:增加一个与分析栈并列的语义栈,用于存放分析栈中文法符号所对应的属性值。例如: EE1+E2 valtop:=valtop+valtop+2;对于表达式5+3当归约为左部E时同时也得到了值816例4.3 3+5*8的语法制导翻译。产生式LEEE1+

15、E2EE1*E2En分析分析栈 语义栈输入入语义动作作# #3+5*8# shift#n #3+5*8# En, valtop:=lexval#E #3+5*8# shift#E+ #3?5*8#shift#E+n #3?5*8#En, valtop:=lexval#E+E #3?5*8#shift #E+E* #3?5?8#shift #E+E*n #3?5?8#En, valtop:=lexval#E+E*E #3?5?8#EE1*E2, valtop:=valtop*valtop-2#E+E #3?40#EE1+E2, valtop:=valtop+valtop-2#E #43#acc翻

16、译方案print(valtop);valtop:=valtop+valtop-2;valtop:=valtop*valtop-2;valtop:=lexval; 语法制导定义print(E.val)E.val:=E1.val+E2.val;E.val:=E1.val*E2.val;E.val:=n.lexval;174.1 4.1 语法制导翻译简介语法制导翻译简介语法制导翻译简介语法制导翻译简介F递归下降分析翻下降分析翻译方案的方案的设计递归下降方法是用程序实现对非终结符的展开和对终结符的匹配。翻译方案的设计需要解决两个问题:1.如何在递归下降子程序中嵌入语义动作?产生式右部的任何位置;2.如

17、何为文法符号的属性设计存储空间?函数返回值、参数、变量等。 184. 4.2 2 中间代码简介中间代码简介中间代码简介中间代码简介1.编译器各阶段的完整输出,均可以被认为是源程序的某种中间表示。2.本章讨论的是中间代码生成器输出的中间表示,称之为中间代码。3.中间代码实际上应起一个编译器前端与后端分水岭的作用。4.要求中间代码具有如下特性,以便于编译器的开发移植和代码的优化:便于语法制导翻译;既与机器指令的结构相近,又与具体机器无关。5.中间代码的主要形式:树、后缀式、三地址码等。194. 4.2 2 中间代码简介中间代码简介中间代码简介中间代码简介F后后缀式式操作数在前,操作符紧随其后,无需

18、用括号限制运算的优先级和结合性。算法算法4.1 后缀式计算采用下述过程进行计算,最终结果留在栈中。x := first_token;while not end_of_exp loopif x in operatorsthenpush x;- 操作数进栈elsepop(operators); - 算符,弹出操作数 push(evaluate); - 计算,将结果进栈end if;next(x);end loop;204. 4.2 2 中间代码简介中间代码简介中间代码简介中间代码简介loopif x in operatorsthenpush x;- 操作数进栈elsepop(operators);

19、 - 算符,弹出操作数 push(evaluate); - 计算,将结果进栈end if;next(x);end loop;算术表达式3+5+8的后缀式为35+8+。#35+8+#push(3)#35+8+#push(5)#35+8+#pop(3和5),push(3+5)#88+#push(8)#88+#pop(8和8),push(8+8)#16#214. 4.2 2 中间代码简介中间代码简介中间代码简介中间代码简介后缀式并不局限于二元运算的表达式,可以推广到任何语句,遵守操作数在前,操作符紧跟其后的原则即可。对语句:if e then x else y后缀式可以写为:e x y if-the

20、n-else(1)此时e、x和y均需计算。实际上,根据条件e的取值,x和y不用都计算:e p1 jez x p2 jump p1: y p2:(2)其中:p1和p2分别是标号;p1 jez表示e的结果为0(假)则转向p1;p2 jump表示无条件转向p2。与 (1)比较,(2)中的if-then-else被分解,首先计算e,根据e的结果是否为真,决定计算x还是计算y。224. 4.2 2 中间代码简介中间代码简介中间代码简介中间代码简介F三地址三地址码1.三地址码的直观表示语法:result := arg1 op arg2 或result := op arg1 或 op arg1语义:结果存放

21、在result中的二元运算arg1 op arg2结果存放在result中一元运算op arg1一元运算op arg1赋值句x := a + b * c的三地址码序列:T1 := b * cT2 := a + T1x := T2234. 4.2 2 中间代码简介中间代码简介中间代码简介中间代码简介2.三地址码的种类(三地址码指令集合)序号 三地址码(1) x := y op z(2) x := op y(3) x := y(4) goto L(5) if x goto L(6) if x relop y goto L(7) param x(8) call n, P(9) return y(10) x := yi(11) xi := y(12) x := &y(13) x := *y(14) *x := y24上次课总结上次课总结上次课总结上次课总结F语法制导翻译的基本概念属性与语义规则语义规则的两种形式LR分析翻译方案的设计F递归下降分析翻译方案的设计F中间代码后缀式三地址码三元式25

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号