考虑下面给出的程序,它采用块结构化的伪语言,具有词法作用域和允许的过程嵌套。
Program main;
Var ...
Procedure A1;
Var ...
Call A2;
End A1
Procedure A2;
Var ...
Procedure A21;
Var ...
Call A1;
End A21
Call A21;
End A21
Call A1;
End main.
考虑调用链:Main-> A1-> A2-> A21-> A1
正确的激活记录集及其访问链接由以下给出:
(A) A
(B) B
(C) C
(D) D答案: (D)
说明:访问链接被定义为程序文本中最接近的词法包围块的激活记录的链接,因此A1,A2和A21的最接近的包围块分别是main,main和A2。在程序退出时。
解决方案:
链接到程序文本中最接近的词法包围块的激活记录。它取决于静态程序文本。
这里的调用顺序为
Main-> A1-> A2-> A21-> A1
现在在Main …下定义了A1,A2,因此A1,A2访问链接指向主A21在A2下定义,因此其访问链接将指向A2。
参考:
http://www.cs.nyu.edu/courses/spring08/G22.2130-001/lectures/lecture-13.html该解决方案由Nitika Bansal提供
这个问题的测验