有人可以用更简单的语言解释伪代码吗?
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!
中转录这个例子时,你犯了一些错误
此示例说明了嵌套函数调用和作用域问题以及编译器需要在目标代码中维护的必要堆栈激活记录,以启用变量访问和递归功能。
在嵌套方面你有:
一个名为 ret
的主程序执行输入和输出。其中嵌套了:
f
当前未分配的函数变量
a
函数包含:
m
一个整型变量
- 一个名为
addm
的函数
一个名为 b
的函数
在主程序中,过程变量f
被分配给函数体a
调用函数 b
传递函数变量 f
函数b
取值函数变量f
,其中包含函数a
在局部函数变量g
.
g
以参数 2 调用,它以该值
调用 a
a
接收值 2
调用 addm
计算 a
的 return 值
addm
计算 m + n
即 0 + 2
=> 2
- 2 是 returned
a
现在 returns 2
g
现在 returns 2
writeln
现在输出 2
b
returns
程序执行完毕
现在可以更详细地检查显示每个堆栈激活记录的内容,但我将省略该级别的详细信息。
谁能解释一下这个伪代码是什么意思?我不太懂,因为我不熟悉这种写法。
我还需要制作激活树。 如果你能指导我就太好了。
(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!
中转录这个例子时,你犯了一些错误此示例说明了嵌套函数调用和作用域问题以及编译器需要在目标代码中维护的必要堆栈激活记录,以启用变量访问和递归功能。
在嵌套方面你有:
一个名为
ret
的主程序执行输入和输出。其中嵌套了:f
当前未分配的函数变量a
函数包含:m
一个整型变量- 一个名为
addm
的函数
一个名为
的函数b
在主程序中,过程变量
f
被分配给函数体a
调用函数
b
传递函数变量f
函数
b
取值函数变量f
,其中包含函数a
在局部函数变量g
.
调用g
以参数 2 调用,它以该值a
a
接收值 2
调用
的 return 值addm
计算a
addm
计算m + n
即0 + 2
=> 2- 2 是 returned
a
现在 returns 2
g
现在 returns 2writeln
现在输出 2b
returns
程序执行完毕
现在可以更详细地检查显示每个堆栈激活记录的内容,但我将省略该级别的详细信息。