编译原理第十章习题

一、 问答题

问答第1题

  下面的程序执行时输出的a分别是什么?若
  (1) 参数的传递办法为"传值";
  (2) 参数的传递办法为"传地址"。
  program main (input,output);
   procedure p(x,y,z);
   begin
      y∶=y+1;
      z∶=z+x;
   end;
  begin
   a∶=2;
   b∶=3;
   p(a+b,a,a);
  print a
  end.


问答第2题

  过程参数的传递方式有几种?简述"传地址"和"传值"的实现原理。


问答第3题

  下面是一个Pascal程序
  program PP(input,output)
   var K:integer;
   function F(N:integer):integer
   begin
    if N< =0 then F:=1
    else F:=N * F(N-1);
   end;
  begin
   K:=F(10);
   ...
  end;
当第二次(递归地)进入F后,DISPLAY的内容是什么?当时整个运行栈的内容是什么?


问答第4题
  对如下的Pascal程序,画出程序执行到(1)和(2)点时的运行栈。
  program Tr(input,output);
   var i:integer; d:integer;
   procedure A(k:real);
    var p:char;
    procedure B;
     var c:char;
     begin
      ...(1)...
     end; {B}
    procedure C;
     var t:real;
     begin
      ...(2)...
     end;{C}
    begin
     .....
     B;
     C;
     .....
    end;{A}
  begin{main}
   ...
   A(d);
   ...
  end.


问答第5题

  有如下示意的Pascal源程序
  program main;
   var a,b,c:integer;
   procedure X(i,j:integer);
    var d,e:real;
    procedure Y;
      var f,g:real;
      begin
      ...
      end;{Y}
    procedure Z(k:integer);
      var h,i,j:real;
      begin
      ...
      end;{Z}
    begin
      .....
      10:Y;
      .....
      11:Z;
      .....
    end;{X}
   begin
    .....
    X(a,b);
    .....
   end.{main}
并已知在运行时刻,以过程为单位对程序中的变量进行动态存储分配。当运行主程序而调用过程语句X时,试分别给出以下时刻的运行栈的内容和DISPLAY的内容。
(1)已开始而尚未执行完毕的标号为10的语句。
(2)已开始而尚未执行完毕的标号为11的语句。