网站大量收购闲置独家精品文档,联系QQ:2885784924

07语义分析和中间代码的产生.ppt

  1. 1、本文档共98页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 语义分析和中间代码产生 语义分析和中间代码的产生 在词法分析和语法分析之后,编译程序要进行静态语义检查和翻译 静态语义检查通常包括: 类型检查 控制流检查 一致性检查 相关名字检查 翻译为中间语言的好处: 便于进行与机器无关的代码优化 使编译程序改变目标机更容易 使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰 1 中间语言 掌握几种中间语言的基本结构 逆波兰表示 图表示法(DAG 和抽象语法树) 三地址代码(四元式、三元式、间接三元式) 1.1 后缀式 后缀式表示法又称逆波兰表示法,把运算量(操作数)写在前面,把算符写在后面(后缀) 一个表达式的后缀式可以如下定义: 如果E是一个变量或常量,则E的后缀式是E自身 如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为 E1’ E2’ op,这里E1’和E2’分别为E1和E2的后缀式 如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式 例如:a+b可以写成 (a+b)*c可以写成 abc+*代表 ab+cd+*代表 把表达式翻译成后缀式的语义规则描述: 1.2 图表示法 图表示法包括DAG与抽象语法树 无循环有向图(Directed Acyclic Graph , 简称 DAG)与抽象语法树一样,对于表达式中的每个子表达式,DAG图中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数 两者不同的是,在DAG图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树 例如:赋值语句a:=b*-c+b*-c的抽象语法树和DAG图如下: 产生赋值语句抽象语法树的属性文法 1.3 三地址代码 三地址代码是由下面一般形式的语句构成的序列: X := y op z 其中,x、y、z为名字、常数或编译时产生的临时变量;op代表运算符号如定点运算符、浮点运算符、逻辑运算符等。每个语句的右边只能有一个运算符 例如:赋值语句a:=b*-c+b*-c的抽象语法树如下: 例如:赋值语句a:=b*-c+b*-c的DAG图如下: 三地址语句的种类 (1)赋值语句 x:=y op z,op为二目算术算 符或逻辑算符; (2)赋值语句 x:=op y ,op为一目算符, 如一目减uminus、逻辑非not、移位算符 及转换算符; (3)复制语句 x:=y; (4)无条件转移语句goto L; (5)条件转移语句 if x relop y goto L,关系运 算符号relop( ,=,>= 等等); (6)过程调用语句 param x 和 call p, n ; 过程返回语句 return y; (7)索引赋值 x:=y[i] 及 x[i] :=y ; (8)地址和指针赋值 x:=&y,x:=* y 和 * x:=y。 产生赋值语句三地址代码的属性文法 E.place表示存放E值的名字 E.code表示对E求值的三地址语句序列 newtemp是个函数,对它的调用将产生一个新的临时变量 三地址语句序列是语法树的线性表示,用临时变量代替语法树中的结点 实际实现中,三地址语句序列往往是被存放到一个输出文件中,而不是将三地址语句序列置入code属性之中 三地址代码的具体实现 四元式 op, arg1, arg2, result 三元式 op, arg1, arg2 间接三元式 间接码表+三元式表 四元式需要利用较多的临时单元,四元式之间的联系通过临时变量实现 中间代码优化处理时,四元式比三元式方便的多,间接三元式与四元式同样方便,两种实现方式需要的存储空间大体相同 2 说明语句 当考察一个过程或分程序的一系列说明语句时,便可为局部于该过程的名字分配存储空间 对每个局部名字,我们将在符号表中建立相应的表项,并填入相应的信息,如类型、在存储器中的相对地址等 相对地址是指对静态数据区基地址的一个偏移量 2.1 过程中的说明语句 在C、Pascal及FORTRAN等语言的语法中,允许在一个过程中的所有说明语句作为一个组来处理,把他们安排在一块数据区中 需要一个全程变量如offset来跟踪下一个可用的相对地址的位置 计算说明语句中名字的类型和相对地址 第一条产生式及其语义动作可写为: P? {offset:=0 } D 进一步用产生式ε的标记非终结符号,改写产生式,以便语义动作均出现整个产生似的右边:

文档评论(0)

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

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

1亿VIP精品文档

相关文档