哈工大编译原理5-2课件.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈工大编译原理5-2课件

第六章 中间代码; 中间代码生成 6.1 中间语言 6.2 常用语句的翻译 6.2.1 说明语句 6.2.2 赋值语句 6.2.3 布尔表达式 6.2.4 过程语句; 序 “中间代码生成”程 序的任务是: ;6.1 中间语言 语法树 后缀式 三地址代码表示;=;赋值语句: 中 缀式: a:=b*-c+b*-c 后缀式: a b c - * b c - * + =;=;6.1.2 三地址代码 一般形式 x:=y op z ;(3)无条件转移语句goto L;;(5)复制语句 x:=y;;6.1.4 三地址代码的具体实现;1、 x=y op z ; 对于语句a:=b*-c+b*-c 的三种表示方法;(0) (1) (2) (3) (4) (5);arg1;相对地址:相对静态数据区基址 ;一、 过程中的说明语句 ;P→D ;Name type kind …… addr X Y …………; 1 .问题的提出;于是提出下面的问题: ;2. 嵌套的程序结构;嵌套说明的文法:;  嵌套说明的程序结构首先要解决的问题是:非局部数据的访问;  具体翻译时,每当碰到过程说明 D→proc id;D1;S时,便创建一张符号表,并且把D1中的所有说明都填入此符号表中;Nil header x a readarray exchange quicksort ;翻译时常用操作:;Tblptr是一个栈,用于存放指向嵌套外层过程的符号表指针;处理嵌套过程中的说明语句翻译方案 ;D→ id: T {enter(top(tblptr),id.name,T.type, top(offset)); ④ top(offset):= top(offset) +T.width} ;P;上述语法树对应的语句: Proc Q;proc R;j:int;S;S; ; 一组嵌套过程,每个过程说明为局部名字建立一个符号表,所有正在翻译过程的符号表组成整个源程序的符号表。;三、 记录中的域名 T→ record LD end { T.type:=record(top(tblptr)); T.width:=top(offset); pop(tblptr);pop(offset)} L→ε {t:=mktable(nil); push(t,tblptr);push(0,offset))} 为-个记录中的域名建立一张符号表 该翻译模式强调了作为一个语言结构的记录的设计与活动记录之间的相似处.;一、 符号表中的名字                           ;用最近嵌套作用域规则查找非局部名字; lookup(id.name)= id.entry nil;S→id:=E                                    ;E→(E1) ;语义动作应包括类型分析,文法符号应有类型属性,在类型分析的基础上,进行相容和赋值相容检查,生成类型转换的三地址代码。; 数组元素的目标代码是什么? ;任一数组元素A[i1,i2, ……in]的地址为: D=a+(i1-l1) d2d3…… dn +(i2-l2) d2 d2 …… dn …… + (in-1-ln-1) dn + (in-ln) ;变量部分:v= (…… (i1 d2 +i2) d3+ i3) d4+ …… + in-1) dn+ in ;1、数组元素地址的计算公式                                                                           ; ②对于一个二维数组,可以按行或按列存放。; base

您可能关注的文档

文档评论(0)

dmdt5055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档