正在加载图片...
308 翁译原理及实践 China-pub.com 下载 件值和转移的代码地址。一地址的1abe1指令指示了这个转移地址的位置。有了用以实现三 地址码的数据结构,这些1abel指令可能并不是必需的。halt指令(无地址)用来标志代码的 结束。 程序清单8-2程序清单8-1中TNY程序的三地址码 read x t1=g>0 ig_false ti goto L1 02 t2▣fact·x actt2 t4▣x0 if_false t4 goto L2 halt 最后,我们注意到原代码中的赋值语句导致了如下形式的copy指令 x=y 例如,例程中语句 fact:mfact'x; 翻译成2个三地址码 即使三地址码指令也是足够了,这种情况的技术原因将在8.2节中讲述。 8.1.2用于实现三地址码的数据结构 三地址码通常不被实现成我们所写的文本形式(虽然这是可能的),相反是将其实现为包含 几个域的记录结构。并将整个三地址指令序列实现成链表或数组,它能被保存在内存中并在需 要时可以从临时文件中读写。 最通常的实现是将三地址码按其所显示的内容实现。这意味着有4个域是必需的:1个操作 符和3个地址。对于那些少于3个地址的指令,将一个或更多的地域置成null或“empy”,具体 选择哪个域取决于实现。必须有4个域的三地址码表示叫做四元式(quadruple)。程序清单8-2的 三地址码的四元式在程序清单83中给出。这里我们用数学中的元组概念书写四元式。 程序清单8-3程序清单8-2中的三地址码的四元式实现 (rd,x,--】 (e (amn,1,fact,_) 件值和转移的代码地址。一地址的 l a b e l指令指示了这个转移地址的位置。有了用以实现三 地址码的数据结构,这些 l a b e l指令可能并不是必需的。 h a l t指令(无地址)用来标志代码的 结束。 程序清单8-2 程序清单8 - 1中T I N Y程序的三地址码 最后,我们注意到原代码中的赋值语句导致了如下形式的 c o p y指令 x = y 例如,例程中语句 f a c t : = f a c t * x ; 翻译成2个三地址码 t2=tact *x f a c t = t 2 即使三地址码指令也是足够了,这种情况的技术原因将在 8 . 2节中讲述。 8.1.2 用于实现三地址码的数据结构 三地址码通常不被实现成我们所写的文本形式 (虽然这是可能的),相反是将其实现为包含 几个域的记录结构。并将整个三地址指令序列实现成链表或数组,它能被保存在内存中并在需 要时可以从临时文件中读写。 最通常的实现是将三地址码按其所显示的内容实现。这意味着有 4个域是必需的:1个操作 符和3个地址。对于那些少于3个地址的指令,将一个或更多的地域置成 n u l l或“e m p t y”,具体 选择哪个域取决于实现。必须有 4个域的三地址码表示叫做四元式 ( q u a d r u p l e )。程序清单8 - 2的 三地址码的四元式在程序清单8 - 3中给出。这里我们用数学中的元组概念书写四元式。 程序清单8-3 程序清单8 - 2中的三地址码的四元式实现 3 0 8 编译原理及实践 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有