責任編集: (inoue@ist.osaka-u.ac.jp)
言語処理工学 期末テスト 2005年 2月4日  井上克郎

教科書、ノート、その他持ち込み  なし!    

(1) 
program main(input,output);                                           
      i: integer;         
        
    procedure p(s);         
           j: integer;         
          
          function f(x);         
             k: integer;         
             begin         
               k:= x * i;         
             return(k)         
           end;         
        
       begin { of p }                   
       j:=f(s) ;                        
       if j > 5 then return;            
       else begin                       
          s:=s*3 ;                    
          p(s);                       
          end                 
       end; { of p}             
                                  
    begin{ of main}            
    i:= 2;                     
    p(i)                       
    end.                      

このプログラムの実行時、最もスタックが長くなる時の、スタックの中の各
呼出のフレーム(駆動レコード)の概略を次の要領で書け。

各フレームの持ち主の手続き/関数の名前
  およびフレーム内の
1 実引数([変数名:値] の組で書く)
2 動的リンク(ポインタの指すところを有向辺で書け)
3 静的リンク(ポインタの指すところを有向辺で書け)
4 ローカル変数([変数名:値] の組で書く)

他の情報は不要。


(2) 次の3番地コードについて答よ。


1    a=1
2 LT:b=a+1
3    if a> b goto LY
4 LX:b=b+2
5    if a==b goto LX
6 LY:if a<>c goto LZ
7    a=b*2
8    goto LT
9 LZ:c=a+b


(2-1) このコード列を基本ブロックに分け(各ブロックに前からb1, b2,
... と順に番号を付けよ)、フローグラフを書け(各ブロック番号を頂点とし、
その間の辺をひく)。

(2-2) 得られたフローグラフに基づいて、支配木(dominator tree)を書け。

(2-3) 後退辺(バックエッジ)を全てあげ、それぞれに付属するループをブロッ
ク番号で示せ。

(2-4) 各ブロックのgen, kill集合を求め、IN、OUTのデータフロー方程式を立
てて、それを解け。解く過程のステップを明示せよ。


	gen	kill
b1	1	7
b2	2	4
b3	4	2
b4	-	-
b5	7	1
b6	9	-



	step1	step2	step3	step4	step5
	12479	12479	12479	12479	12479

in1	00000	00000	00000	00000	00000
out1	10000	10000	10000	10000	10000

in2	00000	10010	10010	11110	11110
out2	01000	11010	11010	11010	11010

in3	00000	01100	11110	11110	11110
out3	00100	00100	10110	10110	10110

in4	00000	01100	11110	11110	11110
out4	00000	01100	11110	11110	11110

in5	00000	00000	01100	11110	11110
out5	00010	00010	01110	01110	01110

in6	00000	00000	01100	11110	11110
out6	00001	00001	01101	11111	11111