编译原理5语法制导翻译技术与中间代码生成new.pptVIP

  • 11
  • 0
  • 约8.54千字
  • 约 37页
  • 2018-06-27 发布于湖北
  • 举报

编译原理5语法制导翻译技术与中间代码生成new.ppt

编译原理5语法制导翻译技术与中间代码生成new

3)转向语句和条件语句的三元式 无条件跳转:(RJ,A,/) 条件真跳转:(TJ,A,B) 条件假跳转:(FJ,A,B)   例1:对于条件语句:if ab then x:=a+b else x:=a-b ( , a , b ) (FJ, 6,(1)) (+ , a , b ) (:=,(3),x ) (RJ, 8, / ) (– , a , b ) (:=, (6),x ) ( ) 例2:对于程序段,这个程序段实际上是包括循环的转向语句 begin k:=100; 10: if ki+j then begin k:=k-1; goto 10; end else k:=i*i-j*j; i:=0;j:=0; end 4)循环语句的三元式 对于循环语句的处理,与前面讲的过程一致,即先把它展成等价的条件语句,然后再将其展成三元式: 例:for I:=1 to 100 do s:=s+I 展开式: i:=1; 10: if i=100 then begin s:=s+i; i:=i+1; goto 10 end 5.4.4树表示 树表示是另外一种较为流行的中间语言表示方法,在这种结构中,树叶均为运算分量,其它结点为运算符。双目运算符对应二叉树,单目运算符对应单叉树 对树的后序遍历便得到该表达式的逆波兰式表示 此外,算术表达式的三元式又可以看作是树的直接表示。 每棵子树对应着一个三元式,子树的树根 便是该三元式的运算符,分量为树叶 如果按最左归约的顺序,对树进行扫 描,也可以得相应的逆波兰表示。 - * / + - a b c d e f 题1: S:=0; For I:=0 to 20 do for j:=0 to I do S:=S+j; 课堂练习:(三元式表示) S:=0; I:=0; 100 : if I =20 then begin j:=0; 200: if j=I then begin S:=S+j; j:=j+1; goto 200; end; I:=I+1; goto 100; end; 题2: S:=0; While xy do begin for I:=0 to y do S:=S+I; y:=y+1; end; S:=0; 100: if xy then begin I:=0; 200:if I = y then begin S:=S+1; I:=I+1; goto 200; end; y:=y+1; goto 100; end 第5章 语法制导翻译技术和中间代码生成 5.1概述 对语法分析后的语法单位进行语义分析,首先编译程序审查每个语法结构的静态语义,如果静态语义正确,再生成中间代码,也有的编译程序不生成中间代码,而直接生成目标代码。 目前较为常见的是用属性文法作为描述程序设计语言语义的工具,采用语法制导翻译法完成对语法成分的翻译工作。 5.2属性文法 属性:一般用来描述客观存在的事物或人的特性。 一个属性文法是在上下文无关文法的基础上,允许每个文法符号X(终结符或非终结符)根据处理的需要,定义与X相关联的属性,以及对属性的处理规则(我们称为语义规则)。 属性通常分为两类:综合属性和继承属性。简单地说,综合属性用于自下向上传递信息,而继承属性用于自上向下传递信息。 在一个属性文法中,对应于每一个产生式A??都有一个与之相关联的语义规则(可包括属性的计算,静态语义检查,符号表操作,代码生成等),每条规则的形式为: b=f(c1,c2,…,ck) 这里f是一个函数,而且或者 1)b是A的一个综合属性,并且c1,c2,…,ck是产生式右边文法符号的属性;或者 2)b是产生式右边文法符号的一个继承属性并且c1,c2,…,ck是A或产生式右边任何文法符号的属性。 在两种情况下,我们都说属性b依赖于属性c1,c2,…,ck 特别强调的是: 1)终结符只有综合属性,他们由词法分析器提供; 2)非终结符既可以有综合属性也可以有继承属性,文法开始符号的所有继承属性作为属

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档