責任編集: (inoue@ist.osaka-u.ac.jp)
!!!!解答!!!!

			言語処理工学A 中間テスト
						       11/25/99

教科書、ノートほか持ち込み可

(1)Javaプログラムは、通常Javacと呼ばれるコンパイラで、バイトコード
BCと呼ばれる中間言語に変換された後、JavaVM (Java Virtual Machine)と呼
ぶインタプリタで解釈実行される。Javac自身はBCで書かれている。

いま、あるJavaで書かれた目的プログラムPが、ある計算機X上でコンパイルさ
れて実行されるまでの様子をT図形で書け。ただし、Xで稼働するJavaVMは、
「Xの機械語XMで記述された、BCを入力として、Xの機械語XMを出力とするコン
パイラ」として表すこと。

      P				  P			P
      |				  |			|
    Java : Java   ---  BC   :	  BC  :	  BC  ---   XM: XM
		   |			       |
		   BC :	BC  --- XM	       XM
                             |
			    XM


(2)文法G4(p.69)を、図4.10(p.75)の順位表を利用して、(n+i)*n を構文解
析する過程を図4.8で示すような表であらわせ(右文形式、非終端記号を除い
た記号列、ハンドルの組を各還元ごとに書くこと)


$(n+i)*n$	$<<(<>+<>)>>*<>$	n
$(E+i)*n$	$<<(<<+<>)>>*<>$		i
$(E+E)*n$	$<<(<<+>)>>*<>$		E+E
$(E)*n$		$<<(==)>>*<>$		(E)
$E*n$		$<<*<>$			n
$E*E$		$<<*>>$				E*E
$E$		$$				受理


(3)次の文法Gにたいして、Follow集合、正準LR(0)集成、LR(0)オートマト
ン、構文解析表を求めよ。

文法G
	(0) E'-> E
	(1) E -> E + T
	(2) E -> T
	(3) T -> i

また、i+i の構文解析の過程を図4.12(P.79)のように示せ。

Follow(E') ={$}
Follow(E) = {$,+}
Follow(T) = {$,+}

I0	E' -> .E
	E  -> .E + T
	E  -> .T
	T  -> .i

I1	E'  -> E.
	E   -> E. + T

I2	E  -> T.

I3	T  -> i.

I4	E  -> E + .T
	T  -> .i

I5	E  -> E + T.


st	E	T	i	+	
0	1	2	3	
1				4
2
3
4		5	3
5	


         action			  goto
st	i	+	$	E	T	
0	s3			1	2
1		s4	受理
2		r2	r2
3		r3	r3
4	s3				5	
5		r1	r1


stack		input		action
				initialize
0		i+i$
				shift3
0i3		 +i$
				reduce3,2 
0T2		 +i$
				reduce2,1
0E1		 +i$
				shift4
OE1+4		  i$
				shift3	
0E1+4i3		   $
				reduce3,5
0E1+4T5		   $
				reduce1,1
0E1		   $
				accepted