有人可以用更简单的语言解释伪代码吗?

Can someone explained the pseudocode to more easy language?

谁能解释一下这个伪代码是什么意思?我不太懂,因为我不熟悉这种写法。

我还需要制作激活树。 如果你能指导我就太好了。

    (1) program ret (input, output) ;
    (2)   var f: function (integer): integer;
    (3)      function a : function (integer): integer ;
    (4)        var m : integer ;
    (5)        function addm(n: integer) : integer;
    (6)             begin return m + n end;
    (7)        begin m := 0; return addm end;
    (8)      procedure b(g: function (integer) : integer);
    (9)        begin writeln(g(2)) end;
    (10)     begin
    (11)       f := a ; b (f)
    (12)     end

实际上这并不是真正的伪代码,而是直接的 Pascal 编码。但是,如果您正在学习编译器课程,我希望您的导师以前使用过这样的示例。然而,从你的问题 sheet!

中转录这个例子时,你犯了一些错误

此示例说明了嵌套函数调用和作用域问题以及编译器需要在目标代码中维护的必要堆栈激活记录,以启用变量访问和递归功能。

在嵌套方面你有:

  1. 一个名为 ret 的主程序执行输入和输出。其中嵌套了:

    1. f 当前未分配的函数变量

    2. a 函数包含:

      1. m一个整型变量
      2. 一个名为 addm
      3. 的函数
    3. 一个名为 b

      的函数
  2. 在主程序中,过程变量f被分配给函数体a

  3. 调用函数 b 传递函数变量 f

    1. 函数b取值函数变量f,其中包含函数a在局部函数变量g.

    2. g 以参数 2 调用,它以该值

      调用 a
      1. a 接收值 2

      2. 调用
      3. addm 计算 a

        的 return 值
        1. addm 计算 m + n0 + 2 => 2
        2. 2 是 returned
      4. a 现在 returns 2

    3. g 现在 returns 2

    4. writeln 现在输出 2

    5. breturns

  4. 程序执行完毕

现在可以更详细地检查显示每个堆栈激活记录的内容,但我将省略该级别的详细信息。