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

ノート、教科書、持ち込み禁止  試験時間 

解答用紙の1ページ目(名前を書くところ)に1番の解答、2ページ目(1ページ
の裏)に2番、3ページめに3番、4ページ目に4番の解答を書くこと。
違う場所に書いたら半分に減点する。

(1) 以下の文章の空白に候補の中から適当な用語を埋めよ。

通常、手続き呼び出しが可能で、変数の[1]を持つ言語のプログラムをコンパ
イルすると、[2]と呼ばれるデータ構造をスタック上に作成するのが普通であ
る。一つの[2]は、一つの手続きや関数の[3]に対応しており、[4]な振舞が記
録される。

[2]の中には、[5],[6],局所変数、戻り値、戻り番地、退避情報、一時作業変数などが保存さ
れる。[5]を用いて手続き(関数)の本体の計算が進行する。また、[1]がネスト
する言語では、このほかに[7]が必要になる。

引数を番地渡しするばあいには、[5]として[8]が入る。また名前渡しの場合は、
引数計算をする[9]の[10]が入る。


[候補]

静的リンク、実行、スコープ、型定義、継承、宣言、動的、動的リンク、
エントリ、仮引数、サンク、駆動バッファ、リンクリスト、形式的、
ポインタ、ハッシュ、フレーム、配列、構造体、実引数、逆リンク、静的

[解答]
1 スコープ、2フレーム(または駆動バッファ)、
3実行、4動的、5実引数、6動的リンク、7静的リンク
8 ポインタ、9サンク、10ポインタ(またはエントリ)

(2)次の3番地コードプログラムを、

    1:基本ブロックに分割して上から順に番号を付け、フローグラフを書け

A:1-4, B:5-8, C:9-12, D:13, E:14-22, F:23-30

         A
	 ↓
     --→ B←-|
     |	 ↓---
     |	  C←-|
     |	 ↓---
     |	  D--------
     |	 ↓ 	 ↓
      ---E	 F

    2:支配木(dominator tree)を作れ

       A
       |
       B
       |
       C
       |
       D
      |  |
     E    F

    3:全てのback edgeを示し、Natural Loopを列挙せよ

    B-B または8-5 で  B
    C-C           で  C
    E-B           で  B,C,D,E

    4:このプログラムはreducibleか否か、理由とともに答えよ

    reducible なぜなら全てのループはNatural Loop


     1	 i= m-1		16 t7=4*i
     2	 j= n		17 t8=4*j
     3	 t1=4*n		18 t9=a[t8]
     4	 v=a[t1]	19 a[t7]=t9
     5	 i=i+1		20 t10=4*j
     6	 t2=4*i		21 a[t10]=x
     7	 t3=a[t2]	22 goto 5
     8	 if tv goto 9 27 t14=a[t13]
     13	 if i>=j goto23 28 a[t12]=t14
     14	 t6=4*i		29 t15=4*n
     15	 x=a[t6]	30 a[t15]=x

(3)先ほどの3番地コードで最適化できる部分をできるだけ沢山列挙せよ。
また、それぞれその最適化の種類を書け。

略

(4)下記のプログラムに対して、

1 それぞれの行iのgen(i), kill(i)を示せ。(1行目のaの代入文はa1のよう
に示せ)
2 各in(i)とout(i)を用いてデータフロー方程式を立てよ。
3 in(1)={}としてデータフロー方程式を解いた結果の各out(i)を示せ。

1  a:=0 ;
2  if a<1 
3     then a:=a+1 ;
4  b:=3 ;

   gen	 	kill
1  1		3
2  -		-
3  3		1
4  4		-

Initilization

in(1)= -
in(2)= -
in(3)= -
in(4)= -

out(1)= 1
out(2)= -
out(3)= 3
out(4)= 4
---
Step1

in(1)= -
in(2)= 1
in(3)= -
in(4)= 3

out(1)= 1
out(2)= 1
out(3)= 3
out(4)= 3 4
----
Step2

in(1)= -
in(2)= 1
in(3)= 1
in(4)= 1 3

out(1)= 1
out(2)= 1
out(3)= 3
out(4)= 1 3 4
-----
Step3

in(1)= -
in(2)= 1
in(3)= 1
in(4)= 1 3

out(1)= 1
out(2)= 1
out(3)= 3
out(4)= 1 3 4  Same as Step 2 then termination
---------------