Presentation is loading. Please wait.

Presentation is loading. Please wait.

言語処理系(8) 金子敬一.

Similar presentations


Presentation on theme: "言語処理系(8) 金子敬一."— Presentation transcript:

1 言語処理系(8) 金子敬一

2 6 構文主導型翻訳 6.1 構文主導型翻訳方式 6.2 構文主導型翻訳系の実現 6.3 中間コード 6.4 後置記法 6.5 解析木と構文木
6 構文主導型翻訳 6.1 構文主導型翻訳方式 6.2 構文主導型翻訳系の実現 6.3 中間コード 6.4 後置記法 6.5 解析木と構文木 6.6  3番地コード,4つ組および3つ組 6.7 代入文の翻訳 6.8 論理式 6.9 制御の流れを変える文

3 6.1 構文主導型翻訳方式 意味動作 生成規則にプログラムを付加 構文解析しながら中間コードを生成 このプログラムを 出力動作 意味規則
6.1 構文主導型翻訳方式 意味動作 生成規則にプログラムを付加 構文解析しながら中間コードを生成 このプログラムを 出力動作 意味規則 などと呼ぶ

4 6.1 構文主導型翻訳方式 翻訳属性 プログラムの扱うデータ 文法記号に付随させる E → E(1) + E(2)
6.1 構文主導型翻訳方式 翻訳属性 プログラムの扱うデータ 文法記号に付随させる E → E(1) + E(2) {E.VAL:=E(1).VAL+E(2).VAL} 上昇型構文解析を想定 葉に近い方が結びつきが強い 翻訳属性

5 6.1 構文主導型翻訳方式 解析木上の翻訳属性 意味動作で翻訳属性を計算可能
6.1 構文主導型翻訳方式 解析木上の翻訳属性 意味動作で翻訳属性を計算可能 E→E(1)+E(2) {E.VAL:=E(1).VAL+E(2).VAL} E→digit  {E.VAL:=digit} 解析木を構成しない場合は,スタックを利用

6 6.1 構文主導型翻訳方式 解析木上の翻訳属性 E→E(1)+E(2) {E.VAL:=E(1).VAL+E(2).VAL}
6.1 構文主導型翻訳方式 解析木上の翻訳属性 E→E(1)+E(2) {E.VAL:=E(1).VAL+E(2).VAL} E→digit  {E.VAL:=digit} 6 E 3 1 E 2 3 E E E 1 + 2 + 3

7 6.2 構文主導型翻訳系の実現 スタックによる実現 A → X Y Z {A.VAL:= f (X.VAL, Y.VAL, Z.VAL)}
6.2 構文主導型翻訳系の実現 スタックによる実現 A → X Y Z {A.VAL:= f (X.VAL, Y.VAL, Z.VAL)} 状態 Z Z.VAL Y Y.VAL X X.VAL 状態 A A.VAL

8 6.2 構文主導型翻訳系の実現 意味動作 電卓の実現 S→E$ E→E(1)+E(2) E→E(1)*E(2) E→(E(1)) E→I
6.2 構文主導型翻訳系の実現 電卓の実現 意味動作 S→E$ E→E(1)+E(2) E→E(1)*E(2) E→(E(1)) E→I I→I(1) digit I→digit {print E.VAL} {E.VAL:=E(1).VAL+E(2).VAL} {E.VAL:=E(1).VAL*E(2).VAL} {E.VAL:=E(1) .VAL} {E.VAL:=I.VAL} {I.VAL:=10*I(1).VAL+LEXVAL} {I.VAL:=LEXVAL}

9 6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ 3 - 2 I I 23 - 2 電卓の実現 S→E$ E→E(1)+E(2)
6.2 構文主導型翻訳系の実現 電卓の実現 2 3 * $ S→E$ E→E(1)+E(2) E→E(1)*E(2) E→(E(1)) E→I I→I(1) digit I→digit 3 - 2 I I 23 - 2

10 6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ E 5 I - 5 * - E I 115 23 電卓の実現 S→E$
6.2 構文主導型翻訳系の実現 電卓の実現 2 3 * $ S→E$ E→E(1)+E(2) E→E(1)*E(2) E→(E(1)) E→I I→I(1) digit I→digit E 5 I - 5 * - E I 115 23

11 6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ E 4 I - 4 + - E 119 115 電卓の実現 S→E$
6.2 構文主導型翻訳系の実現 電卓の実現 2 3 * $ S→E$ E→E(1)+E(2) E→E(1)*E(2) E→(E(1)) E→I I→I(1) digit I→digit E 4 I - 4 + - E 119 115

12 6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ 答えは119 $ - E S 119 - 電卓の実現 S→E$
6.2 構文主導型翻訳系の実現 電卓の実現 2 3 * $ S→E$ E→E(1)+E(2) E→E(1)*E(2) E→(E(1)) E→I I→I(1) digit I→digit 答えは119 $ - E S 119 -

13 6.3 中間コード 中間コード プログラ ミング言語 中間コード 機械語 機械に依存しない

14 6.3 中間コード よく用いられる中間コード 後置記法 構文木 4つ組 3つ組

15 6.4 後置記法 後置記法 e1, e2, ..., ek : 後置記法の式 q : k項演算子
6.4 後置記法 後置記法 e1, e2, ..., ek : 後置記法の式 q : k項演算子 e1 e2 ... ek q : e1, ..., ekで表された値にq を  適用した結果 (a + b) * c a b + c * a * (b + c) a b c + * (a + b) * (c + d) a b + c d + *

16 6.4 後置記法 後置式の評価 1 3 + 5 * 20 4

17 6.5 解析木と構文木 構文木 解析木    構文木 演算子 / 被演算子 * d a * (b + c) / d a + b c

18 6.5 解析木と構文木 (1) E → E(1) op E(2)
6.5 解析木と構文木 構文木への構文主導型翻訳 (1) E → E(1) op E(2) {E.VAL := NODE(op, E(1).VAL, E(2).VAL} (2) E → ( E(1) ) {E.VAL := E(1).VAL} (3) E → -E(1) {E.VAL := UNARY(-, E(1).VAL} (4) E → id {E.VAL := LEAF(id)}

19 6.6 3番地コード,4つ組および3つ組 3番地コード A := B op C 算術・論理演算子 名前,定数,一時名
6.6 3番地コード,4つ組および3つ組 3番地コード A := B op C 算術・論理演算子 名前,定数,一時名 X + Y * Z T1 := Y * Z T2 := X + T1

20 6.6 3番地コード,4つ組および3つ組 その他の3番地文 A := B op C A := op B goto L
6.6 3番地コード,4つ組および3つ組 その他の3番地文 A := B op C A := op B goto L if A relop B goto L param A, call P, n A := B[I], A[I] := B A := addr B, A := *B, *A := B

21 6.6 3番地コード,4つ組および3つ組 4つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3
6.6 3番地コード,4つ組および3つ組 4つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3 OP ARG1 ARG2 RESULT (0) uminus B _ T1 (1) + C D T2 (2) * T3 (3) := A

22 6.6 3番地コード,4つ組および3つ組 3つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3
6.6 3番地コード,4つ組および3つ組 3つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3 OP ARG1 ARG2 (0) uminus B _ (1) + C D (2) * (3) := A

23 6.6 3番地コード,4つ組および3つ組 3つ組 A[I] := B OP ARG1 ARG2 (0) []= A I (1) _ B
6.6 3番地コード,4つ組および3つ組 3つ組 A[I] := B OP ARG1 ARG2 (0) []= A I (1) _ B A := B[I] OP ARG1 ARG2 (0) =[] B I (1) := A

24 6.6 3番地コード,4つ組および3つ組 間接3つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3
6.6 3番地コード,4つ組および3つ組 間接3つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3 ST (0) (14) (1) (15) (2) (16) (3) (17) OP ARG1 ARG2 (14) uminus B _ (15) + C D (16) * (17) := A

25 6.6 3番地コード,4つ組および3つ組 表現法の比較 記憶域 文の順序の変更 4つ組 3つ組 × 間接3つ組

26 6.6 3番地コード,4つ組および3つ組 単一の配列による表現 T1 := - B T2 := C + C T3 := T1 * T2
6.6 3番地コード,4つ組および3つ組 単一の配列による表現 T1 := - B T2 := C + C T3 := T1 * T2 A := T3 OP ARG1 ARG2/RES RESULT (0) uminus B T1 (1) + C D T2 (2) * T3 (3) := A

27 ちょっと休憩 (雑談)

28 学会旅行 ★★★ 長岡(98.8) 高知(98.12) サン・フランシスコ(99.1) サン・ファン(99.4) ★ 鶯宿温泉(99.5)
香港(99.12) サン・ディエゴ(00.1) ペナン(00.11)

29 学会旅行 ★ 京都(01.3) 台北(01.7) ★★★ 那覇(01.7) 倉敷(01.12) サン・アントニオ(02.1)
プラハ(02.6) マドリッド(02.6) 湯布院(02.8),金沢(02.9),…

30 休憩おわり

31 6.7 代入文の翻訳 整数型の代入文 A → id := E E → E + E | E * E | - E | ( E ) | id

32 6.7 代入文の翻訳 抽象的な水準での翻訳方式 E.P : 式Eの値を保持する名前 E.C : 式Eの値を計算する3番地文の列
6.7 代入文の翻訳 抽象的な水準での翻訳方式 E.P : 式Eの値を保持する名前 E.C : 式Eの値を計算する3番地文の列 N( ) : 新しい一時名の生成関数

33 6.7 代入文の翻訳 抽象的な水準での翻訳方式 A → id := E {A.C := E.C++[id.P := E.P]}
6.7 代入文の翻訳 抽象的な水準での翻訳方式 A → id := E {A.C := E.C++[id.P := E.P]} E → E(1)+E(2) {E.P:=N( ); E.C:=E(1).C++E(2).C++[E.P:=E(1).P+E(2).P]} (乗算も同じ) E → -E(1) {E.P:=N( ); E.C:=E(1).C++ [E.P:=-E(1).P]} E →(E(1)) {E.P:=E(1).P; E.C:=E(1).C} E → id {E.P:=id.P; E.C:=[ ]}

34 6.7 代入文の翻訳 具体的な水準での翻訳方式 A → id := E {GEN(id.P := E.P)}
6.7 代入文の翻訳 具体的な水準での翻訳方式 A → id := E {GEN(id.P := E.P)} E → E(1)+E(2) {E.P:=N( ); GEN(E.P:=E(1).P+E(2).P)} E → E(1)*E(2) {E.P:=N( ); GEN(E.P:=E(1).P*E(2).P)} E → -E(1) {E.P:=N( ); GEN(E.P:=-E(1).P)} E →(E(1)) {E.P:=E(1).P} E → id {E.P:=id.P}

35 6.7 代入文の翻訳 混合型の代入文 式Eの翻訳属性として型を表すE.Mを導入 X:=Y+I*J T1 := I int* J
6.7 代入文の翻訳 混合型の代入文 式Eの翻訳属性として型を表すE.Mを導入 X:=Y+I*J T1 := I int* J T2 := inttoreal T1 T3 := Y real+ T2 X := T3 実数型 整数型


Download ppt "言語処理系(8) 金子敬一."

Similar presentations


Ads by Google