1 / 56

言語処理系(9)

言語処理系(9). 金子敬一. 6 構文主導型翻訳. 6.1 構文主導型翻訳方式 6.2 構文主導型翻訳系の実現 6.3 中間コード 6.4 後置記法 6.5 解析木と構文木. 6.6  3番地コード,4つ組および3つ組 6.7 代入文の翻訳 6.8 論理式 6.9 制御の流れを変える文. 6.8 論理式. 式の形 E → E or E | E and E | not E | ( E ) | id | id relop id ただし relop は,<, ≦ ,=, ≠ ,>, ≧ のいずれか or , and は左結合

lars
Download Presentation

言語処理系(9)

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. 言語処理系(9) 金子敬一

  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.8 論理式 • 式の形 E → EorE|EandE|notE|(E) |id|id relop id ただしrelopは,<,≦,=,≠,>,≧のいずれか or, andは左結合 not, and, orの順に優先順位

  4. 6.8 論理式 • 論理式の翻訳方法 基本的には次の2つ • trueを1,falseを0などと数値的に符号化 • 制御の流れを用いる goto L if A goto L if A relop B goto L

  5. 6.8 論理式 • 数値による表現 A or B and C T1 := B and C T2 := A or T

  6. 6.8 論理式 • 数値による表現 A < B or C (1) if A < B goto (4) (2) T1 := 0 (3) goto (5) (4) T1 := 1 (5) T2 := T1 or C

  7. 6.8 論理式 • 数値による表現 E → E(1)orE(2) {T := N( ); E.P := T; GEN(T := E(1).P or E(2).P)} E → id(1) relop id(2) {T := N( ); E.P := T; GEN(if id(1).P relop id(2).P gotoNQ+3); GEN(T := 0); GEN(goto NQ+2); GEN(T := 1);}

  8. 6.8 論理式 • 制御の流れによる論理式の表現 A < B or C (1) if A < B goto (4) (2) T1 := 0 (3) goto (5) (4) T1 := 1 (5) T2 := T1 or C T2 := C T2 := 1

  9. 6.8 論理式 • 制御の流れによる論理式の表現 if E then S(1) else S(2) Eに対する コード S(1)に対する コード TRUE: S(2)に対する コード FALSE:

  10. 6.8 論理式 • 制御の流れによる論理式の表現 while E do S Eに対する コード Sに対する コード TRUE: FALSE:

  11. 6.8 論理式 • 制御の流れによる論理式の表現 分岐点の生成時には分岐先は未定 後埋め MAKELIST(i): アドレスiのみからなるリストを生成 MERGE(p1, p2): アドレスリストp1とp2を併合したリストを返す BACKPATCH(p, i): アドレスリストpが指定する4つ組の分岐先がiとなるように更新

  12. 6.8 論理式 • 制御の流れによる論理式の表現 翻訳属性 E.T: Eが真のときの未定の分岐先を持つ4つ組のアドレスリスト E.F: Eが偽のときの未定の分岐先を持つ4つ組のアドレスリスト

  13. 6.8 論理式 • 制御の流れによる論理式の表現 (1) E→E(1)orME(2) {BACKPATCH(E(1).F, M.Q); E.T := MERGE(E(1).T, E(2).T); E.F := E(2).F} (2) E→E(1)andME(2) {BACKPATCH(E(1).T, M.Q); E.T := E(2).T; E.F := MERGE(E(1).F, E(2).F)}

  14. 6.8 論理式 • 制御の流れによる論理式の表現 (3) E→notE(1) {E.T := E(1).F; E.F := E(1).T} (4) E→(E(1)) {E.T := E(1).T; E.F := E(1).E}

  15. 6.8 論理式 • 制御の流れによる論理式の表現 (5) E→id {E.T := MAKELIST(NQ); E.F := MAKELIST(NQ + 1); GEN(if id.P goto _); GEN(goto _)}

  16. 6.8 論理式 • 制御の流れによる論理式の表現 (6) E→id(1) relop id(2) {E.T := MAKELIST(NQ); E.F := MAKELIST(NQ + 1); GEN(ifid(1).Prelopid(2).Pgoto_); GEN(goto _)} (7) M→e {M.Q := NQ}

  17. E E M E E E M 6.8 論理式 • 制御の流れによる論理式の表現 100: if P < Q goto _ 101: goto _ 102: if R < S goto _ 103: goto _ 104: if T < U goto _ 105: goto _ 102 104 T={100,104} F={103,105} T={104} F={103,105} T={100} F={101} T={102} F={103} Q=102 T={104} F={105} Q=104 < and R S e < T U e < or P Q

  18. 6.8 論理式 • 混合型の式 算術式⊂論理式ならば論理式を数値として扱ったほうが便利;論理式を制御の流れとして表現する方法も利用可能

  19. ちょっと休憩(雑談)

  20. 写真(プラハ)

  21. 写真(プラハ)

  22. 写真(プラハ)

  23. 写真(プラハ)

  24. 写真(プラハ)

  25. 写真(プラハ)

  26. 写真(プラハ)

  27. 写真(プラハ)

  28. 写真(プラハ)

  29. 写真(プラハ)

  30. 写真(プラハ)

  31. 写真(プラハ)

  32. 写真(プラハ)

  33. 写真(プラハ)

  34. 写真(プラハ)

  35. 写真(プラハ)

  36. 写真(プラハ)

  37. 写真(プラハ)

  38. 写真(マドリッド)

  39. 写真(マドリッド)

  40. 写真(マドリッド)

  41. 写真(マドリッド)

  42. 写真(マドリッド)

  43. 写真(トレド)

  44. 写真(トレド)

  45. 写真(トレド)

  46. 写真(トレド)

  47. 写真(プラハ土産)

  48. 写真(マドリッド土産)

  49. 休憩おわり

  50. 6.9 制御の流れを変える文 • 無条件飛越し goto文の翻訳 後方分岐:ラベルの検索,3番地文生成 前方分岐:ラベルの登録,3番地文生成,ラベルに番地を登録

More Related