1 / 35

言語処理系(8)

言語処理系(8). 金子敬一. 6 構文主導型翻訳. 6.1 構文主導型翻訳方式 6.2 構文主導型翻訳系の実現 6.3 中間コード 6.4 後置記法 6.5 解析木と構文木. 6.6  3番地コード,4つ組および3つ組 6.7 代入文の翻訳 6.8 論理式 6.9 制御の流れを変える文. 6.1 構文主導型翻訳方式. 意味動作 生成規則にプログラムを付加 構文解析しながら中間コードを生成 このプログラムを 意味動作 出力動作 意味規則 などと呼ぶ. 6.1 構文主導型翻訳方式. 翻訳属性 プログラムの扱うデータ 文法記号に付随させる

nigel-davis
Download Presentation

言語処理系(8)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 構文主導型翻訳方式 • 意味動作 生成規則にプログラムを付加 構文解析しながら中間コードを生成 このプログラムを • 意味動作 • 出力動作 • 意味規則 などと呼ぶ

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

  5. 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} E→digit{E.VAL:=digit} 6 E 3 1 E 3 2 E E E 1 + 2 + 3

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

  8. 6.2 構文主導型翻訳系の実現 • 電卓の実現 意味動作 • {printE.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} • S→E$ • E→E(1)+E(2) • E→E(1)*E(2) • E→(E(1)) • E→I • I→I(1)digit • I→digit

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

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

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

  12. 6.2 構文主導型翻訳系の実現 • 電卓の実現 2 3 * 5 + 4 $ • 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項演算子 e1e2 ... ekq : 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 4 20

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

  18. 6.5 解析木と構文木 • 構文木への構文主導型翻訳 (1) E → E(1)opE(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 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 • 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

  22. 6.6 3番地コード,4つ組および3つ組 • 3つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3

  23. 6.6 3番地コード,4つ組および3つ組 • 3つ組 A[I] := B A := B[I]

  24. 6.6 3番地コード,4つ組および3つ組 • 間接3つ組 T1 := - B T2 := C + C T3 := T1 * T2 A := T3

  25. 6.6 3番地コード,4つ組および3つ組 • 表現法の比較

  26. 6.6 3番地コード,4つ組および3つ組 • 単一の配列による表現 T1 := - B T2 := C + C T3 := T1 * T2 A := T3

  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番地文の列 • N( ) : 新しい一時名の生成関数

  33. 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)} 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 T2 := inttoreal T1 T3 := Y real+ T2 X := T3 実数型 整数型

More Related