compiler8中间代码课程.pptVIP

  • 3
  • 0
  • 约8.18千字
  • 约 29页
  • 2016-12-08 发布于江苏
  • 举报
第8章 中间代码 一、教学目的   了解中间代码生成的相关概念,熟悉几种常见的中间代码形式,掌握掌握赋值语句、if语句、循环语句的常见的语句的中间代码的生成。 二、教学的难点与重点   1、中间代码形式   2、几种常见语句的中间代码的生成   附: 属性文法 表达式文法 E ? T+T| T or T T ? n | b E?T1 + T2 { T1.type = int T2.type= T1.type E.type :=int } E ?T1 or T2 { T1.type = bool T2.type= T1.type E.type :=bool } T ? n { T.type := int} T ? b { T.type := bool} 操作语义 描述一段程序的含义是通过执行该段程序所改变的计算机(虚拟计算机)状态来反映。这个计算机的状态与程序执行时的状态相对应:包括变量的所有值,可执行程序本身,各种系统定义的内部数据结构。计算机里所有的寄存器的值和存储单元的值作为计算机的状态,用一组形式定义的操作来说明执行一条指令相应的状态怎样变化。 For (expr1;expr2;expr3){ expr1; ... Loop:if expr2=0 goto out } … expr3; goto loop out: ... 公理语义 一个语言的每个语法成分的含义定义为公理和演绎规则,用于推导出该成分执行的效果。 公理语义概念是随着程序正确性的证明而发展的。当正确性证明能构造时表明程序执行它的规格说明所描述的计算。在一个证明中,每一个语句之前之后都有一个逻辑表达式对程序的变量进行约束,以此说明这个语句的含义。 一般的记号 {P} S {Q} 如果在语句S执行前P为真,则在语句S执行并终止后Q为真。 演绎规则的例子 规则 前驱 后继 赋值:x:=expr {P(expr)}x:=expr{P(x)} While: {P ∧ B} S {P} {P} while B do S end {P ∧ (not B)} if--then--else {B ∧ P} S1 {Q}, {(not B) ∧ P} S2 {Q} {P} if B then S1 else S2{Q} 指称语义 指称语义的基本概念是给每一段程序实体定义一个数学意义上的对象,和一个从实体实例向数学意义对象的映射的函数 特点: 不但对全部程序赋予全文而且对程序设计语法 每一个语法成分短语(表达式,命令,声明…) 都给予含义。 每一个语法成分(短语)的含义是以它的自 成分的含义的术语来定义的。 即 语义结构 平行于语法结构。 语义函数: 程序设计语言的语义利用映射函数来证 明。 语义函数将短语映射到它的指称。 例: 二进制数语言 110或10101 语法实体

文档评论(0)

1亿VIP精品文档

相关文档