正在加载图片...
China-pub.com 第8章代码生成 309 下载 《aat2,g (amn,t3,x,_) (1ab,1,-,) (ha1t,-,-,-) 程序清单84程序清单8-3中四元式的数据结构的C定义 typedef snum (rd,gt,if_f,aan,lab,mul, d 【Addrkind kind: union )contentsr 】Addx0ss: typedef struct apiai.aha.aa, ouad: 程序清单84所示的是程序清单8-3中的四元式的C类型定义,在这些定义中,允许地址为 整数、常量或字符串(代表临时变量或一般变量的名字)。由于使用了名字,就必须将其加入到 符号表中,以供进一步处理时查询。另一种替代方法是在四元式中使用指向符号表入口的指针 这将避免额外的查询。这对可嵌套的语言来说有特别的好处,因为这时候的名字查询还需要更 多的嵌套层信息,如果常量也输入符号表,那么将不再需要地址数据类型中的uion 三地址码另一个不同的实现是用自己的指令来代表临时变量,这样地址域从3个减少到了 两个。因此在三地址指令中包含3个地址而日标地址总是一个临时变量⊙。如此的三地址码实现 称为三元式(ple)。它要求:或是通过数组的索引号或是通过链表指针,每个三地址指令都是 可引用的,如程序清单85是程序清单82的三地址码作为三元式实现的抽象表达。在那幅图中, 我们使用了一个数字系统,它对应于代表三元式的数组索引。在三元式内,把三元式引用用圆 括号括起,以同常量相区别。程序清单8-5取消了1abe1指令,代之以三元式引用。 程序清单8-5程序清单8-2中三地址码的三元式表示 (0) (rd,x) (1) (gt,0) (5) (asn,(4),fact) 7 an,(6),x) 日这不是三地址码的固有属性,但能通过实现来保证。例如,程序清单82的代码就是这样的(程序消单83也是)。程序清单8-4 程序清单8 - 3中四元式的数据结构的C定义 程序清单8 - 4所示的是程序清单8 - 3中的四元式的C类型定义,在这些定义中,允许地址为 整数、常量或字符串(代表临时变量或一般变量的名字 )。由于使用了名字,就必须将其加入到 符号表中,以供进一步处理时查询。另一种替代方法是在四元式中使用指向符号表入口的指针, 这将避免额外的查询。这对可嵌套的语言来说有特别的好处,因为这时候的名字查询还需要更 多的嵌套层信息,如果常量也输入符号表,那么将不再需要地址数据类型中的 u n i o n。 三地址码另一个不同的实现是用自己的指令来代表临时变量,这样地址域从 3个减少到了 两个。因此在三地址指令中包含3个地址而目标地址总是一个临时变量 。如此的三地址码实现 称为三元式( t r i p l e )。它要求:或是通过数组的索引号或是通过链表指针,每个三地址指令都是 可引用的,如程序清单8 - 5是程序清单8 - 2的三地址码作为三元式实现的抽象表达。在那幅图中, 我们使用了一个数字系统,它对应于代表三元式的数组索引。在三元式内,把三元式引用用圆 括号括起,以同常量相区别。程序清单8 - 5取消了l a b e l指令,代之以三元式引用。 程序清单8-5 程序清单8 - 2中三地址码的三元式表示 第 8章 代 码 生 成 3 0 9 下载 这不是三地址码的固有属性,但能通过实现来保证。例如,程序清单8 - 2的代码就是这样的(程序清单8 - 3也是)
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有