过程是编译器的重要且经常使用的编程结构。它用于为过程调用和返回生成良好的代码。
程序调用顺序调用的转换包括在每个过程的进入和退出时采取的一系列操作。在调用顺序中将执行以下操作:
- 当发生过程调用时, 则会为激活记录分配空间。
- 评估被调用过程的参数。
- 建立环境指针, 以使被调用过程能够访问封闭块中的数据。
- 保存调用过程的状态, 以便它可以在调用后恢复执行。
- 同时保存寄信人地址。它是被调用例程完成后必须转移到的位置的地址。
- 最后, 为被调用过程生成一个跳转到代码开头。
S →call id(Elist)
Elist →Elist, E
Elist →E
用于过程调用的合适过渡方案为:
生产规则 | 语义动作 |
---|---|
S→通话ID(Elist) | 对于QUEUE do GEN(parap p)GEN(call id.PLACE)上的每个项目p |
Elist→Elist, E | 将E.PLACE附加到QUEUE的末尾 |
Elist→E | 初始化QUEUE以仅包含E.PLACE |