美文网首页
编译器笔记30-中间代码生成-数组引用的翻译

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

作者: 衣忌破 | 来源:发表于2020-03-03 08:57 被阅读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

    相关文章

      网友评论

          本文标题:编译器笔记30-中间代码生成-数组引用的翻译

          本文链接:https://www.haomeiwen.com/subject/hwrnkhtx.html