编译原理:第七章 中间语言(2)_第1页
编译原理:第七章 中间语言(2)_第2页
编译原理:第七章 中间语言(2)_第3页
编译原理:第七章 中间语言(2)_第4页
编译原理:第七章 中间语言(2)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、7.3 中间代码翻译算法7.3.1 属性文法A=(G, V, E); 【定义】 属性文法是上下文无关文法在语义上的扩展,可定义为如下三元组:其中:G(文法);V(属性集);E(属性规则集)。 属性 代表与文法符号相关的信息,这里主要指语义信息(类型、种类、值和值地址);文法产生式中的每个文法符号都附有若干个这样的属性。 属性可以进行计算和传递,属性规则就是在同一产生式中,相互关联的属性求值规则。 属性分两类(按属性求值规则区分): 综合属性:其值由子女属性值来计算(自底向上求值); 继承属性:其值由父兄属性值来计算(自顶向下求值)。说明 属性文法构造示例 :【例7.7】 算术表达式的属性文法;

2、 设:X.val 为文法符号 X 的值属性; 下述属性文法用于算术表达式的求值运算:E - E1 + T ; | E.val:= E1.val + T.valT - T1 * F ; | T.val:= T1.val * F.valE - T ; | E.val:= T.valT - F ; | T.val:= F.valF - ( E ) ; | F.val:= E.valF - i ; | F.val:= i.valE - E1 - T ; | E.val:= E1.val - T.valT - T1 / F ; | T.val:= T1.val / F.val【注】可以看出: X.val

3、 属性是综合属性。 属性计算过程示例 : 根据算术表达式属性文法及其相应的属性求值规则, 2+4*(5-9/3)的属性语法树:E.10E1.2 + T.8 T.2 T.4 * F.2 F.2 F.4 ( E.2 ) 2 4 E.5 - T.3 T.5 T.9 / F.3 F.5 F.9 3 5 9按 最左推导或 最左归约 传递规则: 计算规则:7.3.2 语法制导翻译技术 【定义】语法制导(syntax_directed)是指根据语言的形式文法对输入序列进行分析、翻译处理;核心技术是构造 翻译文法 - 在源文法产生式中插入语义动作符号(翻译子程序),借以指明属性文法中属性求值时机和顺序。 以算

4、术表达式文法为例,探讨翻译文法的构造! 通俗地说,所谓语法制导翻译技术,是指: 语法分析技术 翻译文法构造技术 +注 为叙述简便起见,除非临时详细指明,标识符 X 的属性一律视为符号表项指针,同时用:X 表示 X.point !逆波兰式翻译文法构造示例:符号串 a*(b+c)的分析(翻译)过程(推导法):E=T=T*F* =F*F* =aa*F* =aa*(E)* =aa*(E+T+)* =ai*(T+T+)* 导出序列aa*(bb+cc+)* =+ 分解导出序列:去掉动作符号: a*(b+c) . 源表达式;去掉文法符号: abc+* . 逆波兰式;【例7.8】 算术表达式逆波兰式翻译文法

5、a:动作符号;含义:输出(a)E - T | E+T+ | E-T-T - F | T*F* | T/F/F - ii | (E) G(E)注 四元式翻译文法构造示例1:. 从逆波兰式的翻译到四元式的翻译: t1 = c / d t2 = t1 - e t3 = b * t2 t4 = a + t3四元式 则 算术表达式 a+b*(c/d-e) 的逆波兰式算符进栈之日,也就是四元式生成之时。重要结论逆波兰式(生成)计算顺序:a 即为 PUSH(a)- 逆波兰式在栈中!假定:t3at1t2t4(结果)bcd/e-*+ GEQ() 表达式四元式生成函数:G(E):E - T | E+TGEQ(+)

6、 | E-TGEQ(-) T - F | T*FGEQ(*) | T/FGEQ(/) F - iPUSH(i) | ( E ) 四元式翻译文法构造示例2:. 算术表达式四元式翻译文法设计假定:SEM(m)- 语义栈(属性传递、赋值场所); PUSH(i) 压栈函数(把当前 i 压入语义栈);则:其中:QTq 四元式区; t := NEWT; 申请临时变量函数; SEND( SEMm-1,SEMm,t) POP;POP;PUSH(t)生成一个四元式送QTq语义栈次栈顶、栈顶 动作函数(序列)执行过程示例 :G(E):E - T | E+TGEQ(+) | E-TGEQ(-) T - F | T*

7、FGEQ(*) | T/FGEQ(/) F - iPUSH(i) | ( E ) 对比 算术表达式 a*(b/c-d) 的逆波兰式动作序列:abc/d-* ;可得四元式动作序列: QTq SEMm 动作序列 a b c t2 PUSH(d) GEQ(-) GEQ(/) GEQ(*) PUSH(c) PUSH(b) PUSH(a)执行过程 a a b a t1 d a b c a t1 d ( * a t2 t3 )( - t1 d t2 )( / b c t1 ) t3 a7.3.3 四元式翻译文法设计扩展1. 赋值语句四元式翻译文法: S - vPUSH(v)=EASSI(=) ; ASSI

8、(=) - 赋值函数; SEND(:= SEMm,_ ,SEMm-1 ); POP;POP; . 标号、转向语句四元式翻译文法: S - i PUSH(i) :LABER(i) S ; S - goto iGOTO(i); LABER(i) - 标号函数; SEND( lb _ ,_ ,SEMm ); POP; GOTO(i) - 转向函数; SEND( gt _ ,_ ,i ); 7.3.3 四元式翻译文法设计扩展2. 条件语句四元式翻译文法: S - if(R)IF(if)S;elseEL(el)SIE(ie) IF(if) - if 函数; SEND( if SEMm, _ , _ );

9、 POP; IE(i) - ifend 函数; SEND( ie _ ,_ ,_ ); EL(el) - else 函数; SEND( el _ ,_ ,_ ); R - E E GEQ() GEQ() - 表达式四元式生成函数; 其中的 为当前匹配的关系算符。7.3.3 四元式翻译文法设计扩展3. 循环语句四元式翻译文法: S - whileWH()(R)DO(do)SWE(we); WH(wh) - 循环头 函数; SEND( wh _ , _ , _ ); WE(we) - 循环尾 函数; SEND( we _ ,_ ,_ ); 【注】文法中的 R 为 关系表达式(见条件语句四元式翻译文

10、法)。 DO(el) - DO 函数; SEND( do SEMm ,_ ,_ ); POP ; 7.3.3 四元式翻译文法设计扩展4 . 说明语句四元式翻译文法: 说明语句的翻译目标:填写符号表 (1)原文法: D - id:T;D | id:TT - integer | real | array num of T | T(2)文法变换: D - id:TDD - ;id:TD | T - integer | real | array num of T | T(3)翻译文法: D -INI()idNAME():TENT()DD -;idNAME():TENT()D | T -integerT

11、YP(i) -realTYP(r) -array numNUM() of TTYP(a) -TTYP()INI()-初始化 函数; offset := 0 ; NAME()-标识符 名字处理 函数; := entry(id) ; ENT()-填写符号表 函数; enter( , T.type, offset );(2)offset := offset + T.width; TYP(x)-标识符类型处理 函数; T.type := x; T.width := x.width; NUM()-标识符类型处理 函数; num.val := val(num); 翻译文法应用

12、验证示例【例7.9】 已知条件语句 if(a if( R )IF(if) S ; IE(ie)E EGEQ()apush(a)aPUSH(a) = EASSI(=)E + TGEQ(+)TFapush(a)TFF1push(1)TFbpush(b) if(a0)a=a+1 四元式翻译的动作序列:push(a),push(a),push(b),GEQ(),IF(if),PUSH(a) push(1),GEQ(+),ASSI(=),IE(ie) 根据上述条件语句四元式翻译的动作序列,if(a0)a=a+1 的四元式生成过程:IF(if) push(a) push(b)push(a)push(1)GEQ(+)ASSI(=)IE(ie)PUSH(a)GEQ() QTq SEMm 动作序列 a

温馨提示

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

评论

0/150

提交评论