首页 > 解决方案 > 有人可以将伪代码解释为更简单的语言吗?

问题描述

有人能解释一下这个伪代码是什么意思吗?我真的不明白,因为我不熟悉这种类型的写作。

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

    (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

标签: compiler-constructionpseudocode

解决方案


实际上,这并不是真正的伪代码,而是简单的 Pascal 编码。但是,如果您正在学习编译器课程,我希望您的导师以前使用过这样的示例。但是,在从问题表中转录此示例时,您犯了一些错误!

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

在嵌套方面,您有:

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

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

    2. a一个包含以下内容的函数:

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

  2. 在主程序中,过程变量f被赋予函数体a

  3. 通过函数b变量调用该函数f

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

    2. g使用参数 2 调用a,使用该值调用

      1. a接收值 2

      2. addm被调用来计算返回值a

        1. addm计算m + n= 0 + 2> 2
        2. 2 被退回
      3. a现在返回 2

    3. g现在返回 2

    4. writeln现在输出 2

    5. b返回

  4. 程序完成执行

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


推荐阅读