编译原理五

2019-06-17  本文已影响0人  小屋的快乐

目标程序运行时存储空间的组织

静态存储分配

简单的栈式存储分配(C语言除去可变数组)

  1. 过程调用
    遇到par T1,就要为其构建活动记录。(TOP+1是老SP)
    过程进入:SP=TOP+1,1[SP]=返回地址(PC),TOP=TOP+L;
    之后数据分配(数组内情向量),运行时数组起始地址回填。
  2. 过程返回:
    返回值有一个寄存器,只能有一个。
    销毁活动记录:TOP=SP-1,SP=0[SP](变址寻址,里面存着老SP),X=2[TOP] UJ0[x]

嵌套过程语言的栈式实现

用嵌套层次显示(DISPLAY表)嵌套层次简称层数。主程序是0层,之后不断+1。DISPLAY表就是把从直接外层到第0层所有活动记录基址组建成一个表,这个表叫DISPLAY表。第i层display表中有i+1个单元。(当前到第0层),把父层一抄+自己(存SP现行值)。

找变量:不断往外层找。
位置:放到活动记录。活动记录存放DISPLAY表(直接外层的)在形式单元上边。全局DISPLAY表也是连接数据。返回地址上有全局DISPLAY表地址。
1[TOP]=SP
3[TOP]=SP+d
......
之后JSR P(准备P的入口地址放PC)
过程进入:SP=TOP+1;
1【SP】=返回地址(还没放,可保护)
TOP=TOP+L
之后按照第三项连接数据抄k个单元内容,最后填新SP形成新SP。

过程返回:与第二节相同。

例题

目标代码的生成

简单代码生成器(1、寄存器呆时间长 2、寄存器优于内存)

例子: 待用活跃.jpg

练习(重要):

符号表与错误处理

符号表

错误处理

查错,改错。(语法错误,语义错误)

上一篇下一篇

猜你喜欢

热点阅读