函数说明翻译

函数说明 → 填符号表

  • 函数名
  • 形参列表(个数 + 类型 + 顺序)
  • 局部变量信息
  • 返回类型

符号表记录格式示例:

函数名: f
返回类型: int
形参: (int, float)
局部量: x, y

函数调用翻译

函数调用四步:

重点 函数调用的四步流程必须掌握。

第一步:检查存在性 + 参数匹配

  • 查符号表确认函数已声明
  • 核对实参与形参的个数、顺序、类型是否一致

第二步:分配活动记录

  • 为被调用函数分配活动记录(Activation Record, AR)
  • AR 包含:实参空间、局部数据、临时变量、机器状态、返回地址、存取链与控制链

第三步:传参

  • 将实参值或地址填入 AR 的实参空间
  • 参数传递方式:值传递 / 引用传递

第四步:保存返回地址

  • 将调用点下一条指令地址作为返回地址保存到 AR 中
  • 生成跳转指令进入被调用函数
  • 函数执行完成后通过返回地址回到调用点

中间代码示例

调用 f(a, b)

    // 检查存在性 + 参数匹配(语义分析阶段完成)
    // 分配AR并传参
    (param, a, _, _)
    (param, b, _, _)
    // 保存返回地址并跳转
    (call, f, _, 返回地址)
    // 返回后继续执行
  • param 指令传递参数
  • call 指令保存返回地址并跳转到函数入口
  • 函数内使用 return 指令返回