📜  程序调用

📅  最后修改于: 2020-12-06 07:32:09             🧑  作者: Mango

程序调用

过程是编译器的重要且经常使用的编程结构。它用于为过程调用和返回生成良好的代码。

调用顺序:

呼叫的转换包括在每个过程的进入和退出时采取的一系列操作。在调用顺序中将执行以下操作:

  • 当发生过程调用时,则会为激活记录分配空间。
  • 评估被调用过程的参数。
  • 建立环境指针,以使被调用过程能够访问封闭块中的数据。
  • 保存调用过程的状态,以便它可以在调用后恢复执行。
  • 同时保存寄信人地址。它是被调用例程在完成后必须转移到的位置的地址。
  • 最后,为被调用过程生成一个跳转到代码开头。

让我们考虑一个简单的过程调用语句的语法

  S →    call id(Elist)
     Elist →   Elist, E
     Elist →  E

用于过程调用的合适过渡方案为:

Production Rule Semantic Action
S → call id(Elist) for each item p on QUEUE do
  GEN (param p)
    GEN (call id.PLACE)
Elist → Elist, E append E.PLACE to the end of QUEUE
Elist → E initialize QUEUE to contain only

   E.PLACE

队列用于存储过程调用中的参数列表。