我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 元编译程序 >

北航编译原理课件 07源程序的中间形式

归档日期:07-02       文本归类:元编译程序      文章编辑:爱尚语录

  北航编译原理课件 07.源程序的中间形式_工学_高等教育_教育专区。第七章 源程序的中间形式 ? 波兰表示 ? N-元表示 ? 抽象机代码 北京航空航天大学计算机学院 1 7.1 波兰表示 一般编译程序都生成中间代码, 一般编译程序都生成中间代码,然后再生成

  第七章 源程序的中间形式 ? 波兰表示 ? N-元表示 ? 抽象机代码 北京航空航天大学计算机学院 1 7.1 波兰表示 一般编译程序都生成中间代码, 一般编译程序都生成中间代码,然后再生成目 标代码,主要优点是可移植(与具体目标程序无关 与具体目标程序无关), 标代码,主要优点是可移植 与具体目标程序无关 , 且易于目标代码优化。有多种中间代码形式: 且易于目标代码优化。有多种中间代码形式: N-元组表示 抽象机代码 波兰表示 - 波兰表示 算术表达式: 算术表达式: F*3.1416*R*(H+R) 转换成波兰表示: 转换成波兰表示: F3.1416*R*HR+* 赋值语句: 赋值语句: A := F * 3.1416 * R * ( H + R ) 波兰表示: 波兰表示: AF3.1416 * R * HR + * := 北京航空航天大学计算机学院 2 #a+b# ab+ + 操作符栈 # #优先级最低 算法: 算法: 设一个操作符栈;当读到操作数时,立即输出该操作数, 设一个操作符栈;当读到操作数时,立即输出该操作数, 当扫描到操作符时,与栈顶操作符比较优先级, 当扫描到操作符时,与栈顶操作符比较优先级,若栈顶操作 符优先级高于栈外,则输出该栈顶操作符,反之, 符优先级高于栈外,则输出该栈顶操作符,反之,则栈外操 作符入栈。 作符入栈。 北京航空航天大学计算机学院 3 if 语句的波兰表示 label 1 label 2 if 语句 :if expr then stmt1 else stmt2 波兰表示为 :exprlabel1BZstmt1label2BRstmt2 BZ: 二目操作符 的计算结果为0 若expr的计算结果为 (false), 的计算结果为 , 则产生一个到label1的转移 则产生一个到 的转移 BR: 一目操作符 产生一个到 产生一个到 label2的转移 的转移 北京航空航天大学计算机学院 4 波兰表示为 :exprlabel1BZstmt1label2BRstmt2 语句的波兰表示可生成如下的目标程序框架: 由if语句的波兰表示可生成如下的目标程序框架: 语句的波兰表示可生成如下的目标程序框架 expr BZ label1 stmt1 BR label2 label1:stmt2 label2: 其他语言结构也很容易将其翻译成波兰表示, 其他语言结构也很容易将其翻译成波兰表示, 使用波兰表示优化不是十分方便。 使用波兰表示优化不是十分方便。 北京航空航天大学计算机学院 5 7.2 N-元表示 - 在该表示中,每条指令由 个域组成 个域组成, 在该表示中,每条指令由n个域组成,通常第一 个域表示操作符,其余为操作数。 个域表示操作符,其余为操作数。 常用的n元表示是: 常用的 元表示是: 元表示是 三元式 操作符 三元式 四元式 右操作数 左操作数 表达式的三元式: 表达式的三元式:w * x + ( y + z ) (1) *, w, x (2) +, y, z (3) +, (1), (2) 北京航空航天大学计算机学院 第三个三元 式中的操作数(1) 式中的操作数 (2)表示第 和第 表示第(1)和第 表示第 (2)条三元式的计 条三元式的计 算结果。 算结果。 6 条件语句的三元式: 条件语句的三元式: if x y then z := x; else z := y+1; (1) (2) (3) (4) (5) (6) (7) -, x, BMZ, (1), :=, z, BR, , +, y, :=, z, : : 北京航空航天大学计算机学院 y (5) x (7) 1 (5) 其中: 其中: BMZ:是二元操作符 测试第二 :是二元操作符,测试第二 个域的值, 个域的值,若≤0,则按 , 个域的地址转移, 第3个域的地址转移, 个域的地址转移 则顺序执行。 若0,则顺序执行。 则顺序执行 BR: 一元操作符,按第 个域 : 一元操作符,按第3个域 作无条件转移。 作无条件转移。 7 使用三元式不便于代码优化,因为优化要删除 使用三元式不便于代码优化, 一些三元式,或对某些三元式的位置要进行变更, 一些三元式,或对某些三元式的位置要进行变更,由 于三元式的结果(表示为编号 表示为编号), 于三元式的结果 表示为编号 ,可以是某个三元式的 操作数,随着三元式位置的变更也将作相应的修改, 操作数,随着三元式位置的变更也将作相应的修改, 很费事。 很费事。 间接三元式: 间接三元式: 为了便于在三元式上作优化处理, 为了便于在三元式上作优化处理,可使用间接三元式 三元式的执行次序用另一张表表示,这样在优化时, 三元式的执行次序用另一张表表示 这样在优化时, 这样在优化时 三元式可以不变,而仅仅改变其执行顺序表。 三元式可以不变,而仅仅改变其执行顺序表。 北京航空航天大学计算机学院 8 例: A:=B+C*D/E F:=C*D 用间接三元式表示为: 用间接三元式表示为: 操作 1. (1) 2. (2) 3. (3) 4. (4) 5. (1) 6. (5) 三元式 (1) * , C, D (2) / , (1), E (3) + , B, (2) (4) := , A, (3) (5) := , F, (1) 北京航空航天大学计算机学院 9 四元式表示 操作数1 操作数2 操作符 操作数 操作数 结果 结果:通常是由编译引入的临时变量, 结果:通常是由编译引入的临时变量,可由编译程序 分配一个寄存器或主存单元。 分配一个寄存器或主存单元。 例: (A+ B) * (C + D) - E +, A, B, +, C, D, *, T1, T2, 一, T3, E, 北京航空航天大学计算机学院 T1 T2 T3 T4 式中T1,T2,T3,T4 式中 , , , 为临时变量, 为临时变量,由四 元式优化比较方便 10 7.3 抽象机代码 许多pascal编译系统生成的中间代码是一种称为 编译系统生成的中间代码是一种称为 许多 P-code的抽象代码,P-code的“P”即“Pseudo” - 的抽象代码, - 的 即 的抽象代码 抽象机: 寄存器 保存程序指令的存储器 堆栈式数据及操作存储 北京航空航天大学计算机学院 11 寄存器有: 寄存器有: 1. PC-程序计数器 - 2. NP-New指针,指向“堆”的顶部。“堆”用来存放由 指针, 的顶部。 用来存放由New - 指针 指向“ 生成的动态数据。 生成的动态数据。 3. SP- 运行栈指针,存放所有可按源程序的数据声明直接 - 运行栈指针, 寻址的数据。 寻址的数据。 4. BP-基地址指针,即指向当前活动记录的起始位置指针。 -基地址指针,即指向当前活动记录的起始位置指针。 5. 其他,(如MP-栈标志指针,EP-极限栈指针等) 其他,( ,(如 -栈标志指针, -极限栈指针等) 北京航空航天大学计算机学院 12 计算机的存储大致情况如下: 栈底 运行栈 P-code指令 BP SP NP 堆 堆底 当前模块活 动记录 (数据段) PC 常量区 程序指令存储器 北京航空航天大学计算机学院 13 运行P- 运行 -code的抽象机没有专门的运算器或 的抽象机没有专门的运算器或 累加器,所有的运算(操作 操作)都在运行栈的栈顶进 累加器,所有的运算 操作 都在运行栈的栈顶进 如要进行d:=(a+b)*c的运算,生成 -code序 的运算, 行,如要进行 的运算 生成P- 序 列为: 列为: 栈底: 栈底: 运行栈 a单元 单元 b单元 单元 c单元 单元 SP d单元 单元 a b 栈顶 取a 取b + 取c * 送d LOD a LOD b ADD LOD c MUL STO d P-code实际上是波兰表示形式的中 - 实际上是波兰表示形式的中 间代码 14 北京航空航天大学计算机学院

本文链接:http://rhone-credit.com/yuanbianyichengxu/264.html