编译器笔记30-中间代码生成-数组引用的翻译

2020-03-03  本文已影响0人  衣忌破

数组引用的翻译

赋值语句的基本文法.png

L表示的是一个数组元素。将数组引用翻译成三地址码时要解决的主要问题是确定数组元素的存放地址,也就是数组元素的寻址。

数组元素寻址 (Addressing Array Elements)

数组元素寻址 .png

注:变量的偏移地址是指变量所在段的起始地址到该变量的字节距离。如下图

注.png

例如,假设type(a) = array(3, array(5, array(8, int))) ,一个整型变量占用4个字节,则

i1*w1=i1*5*8*4=i1*160
i2*w2=i2*8*4=i2*32
i3*w3=i3*4=i3*4

例.png
带有数组引用的赋值语句的翻译
例1.png

注:这里用到了一个数组的名字a表示数组的基地址,数组的基地址加上数组的偏移地址就得到数组的实际地址t2。

例2.png
数组引用的SDT
赋值语句的基本文法.png

w1是数组元素a[i1]的宽度,要想求此宽度需要知道a[i1]的类型表达式。我们说a[i1]是a的一个元素,现在a的表达式通过查询符号表已经获得,那么我们根据a的类型表达式就可以得到他的元素也就是a[i1]的类型表达式。a[i1][i2]是a[i1]的一个元素,因此我们可以同过子节点的type属性的元素的类型表达式来获得。

数组引用的SDT.png
上一篇下一篇

猜你喜欢

热点阅读