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

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 5 週 EXCEL 2 徳山 豪・全眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

1 情報基礎 A 第 6 週 EXCEL 3 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
5.制御構造と配列 場合分け( If Then Else , Select Case ) 繰返し( Do While ) 繰返しその2( For Next )
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
形状デザイン 様々な形 制御構造.
正規表現からのDFA直接構成.
言語処理系(1) 金子敬一.
第6回条件による分岐.
言語処理系(7) 金子敬一.
4章 制御の流れ-3.
徳山豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野
プログラミング言語としてのR 情報知能学科 白井 英俊.
言語処理系(4) 金子敬一.
12.3,E,-15, 12.3,E5,+,=, >,<,…,
言語処理系(6) 金子敬一.
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
コンパイラ 第9回 コード生成 ― スタックマシン ―
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
プログラミング言語論 第4回 式の構文、式の評価
情報基礎A 第7週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
条件式 (Conditional Expressions)
言語処理系(5) 金子敬一.
4.2.2 4to1セレクタ.
言語処理系(8) 金子敬一.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
大域的データフロー解析 流れグラフ 開始ブロック 基本ブロックをnodeとし、 基本ブロック間の制御関係をedgeとするグラフを、
第7回 条件による繰り返し.
プログラムの制御構造 選択・繰り返し.
言語プロセッサ 第7回目 平成27年11月16日.
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
アルゴリズムとプログラミング (Algorithms and Programming)
Structured programming
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
プログラミング言語論 第4回 文の翻訳 C言語の文 表明 Hoare論理
計算機構成 第2回 ALUと組み合わせ回路の記述
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
プログラムの制御構造 配列・繰り返し.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第7回 文の翻訳 C言語の文 表明 Hoare論理
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
プログラムの基本構造と 構造化チャート(PAD)
制御文の役割と種類 IF文 論理式と関係演算子 GO TO文
プログラミング入門.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第3回 2007年10月22日(月).
プログラミングⅡ 第2回.
プログラミング基礎a 第4回 C言語によるプログラミング入門 条件判断と反復
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
プログラミング言語論 第4回 文の翻訳 C言語の文 表明 Hoare論理
プログラミング言語論 第4回 文の翻訳 C言語の文 表明 Hoare論理
情報処理Ⅱ 2005年10月28日(金).
PROGRAMMING IN HASKELL
プログラミング序論演習.
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
C言語講座 四則演算  if ,  switch 制御文.
情報処理Ⅱ 2006年10月27日(金).
構文主導翻訳.
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

言語処理系(9) 金子敬一

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 制御の流れを変える文

6.8 論理式 式の形 E → E or E | E and E | not E | ( E ) | id | id relop id 6.8 論理式 式の形 E → E or E | E and E | not E | ( E ) | id | id relop id ただしrelopは,<,≦,=,≠,>,≧のいずれか  or, andは左結合  not, and, orの順に優先順位

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

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

6.8 論理式 数値による表現 A < B or C (1) if A < B goto (4) (2) T1 := 0 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

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

6.8 論理式 制御の流れによる論理式の表現 A < B or C (1) if A < B goto (4) 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

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

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

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

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

6.8 論理式 制御の流れによる論理式の表現 (1) E → E(1) or M E(2) {BACKPATCH(E(1).F, M.Q); 6.8 論理式 制御の流れによる論理式の表現 (1) E → E(1) or M E(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) and M E(2) {BACKPATCH(E(1).T, M.Q); E.T := E(2).T; E.F := MERGE(E(1).F, E(2).F)}

6.8 論理式 制御の流れによる論理式の表現 (3) E → not E(1) {E.T := E(1).F; E.F := E(1).T} 6.8 論理式 制御の流れによる論理式の表現 (3) E → not E(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}

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

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

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

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

ちょっと休憩 (雑談)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(プラハ)

写真(マドリッド)

写真(マドリッド)

写真(マドリッド)

写真(マドリッド)

写真(マドリッド)

写真(トレド)

写真(トレド)

写真(トレド)

写真(トレド)

写真(プラハ土産)

写真(マドリッド土産)

休憩おわり

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

6.9 制御の流れを変える文 構造的制御文 S → if E then S | if E then S else S 6.9 制御の流れを変える文 構造的制御文 S → if E then S | if E then S else S | while E do S | begin L end | A L → L; S | S

6.9 制御の流れを変える文 翻訳を実現するための方法 S → if E then M(1) S(1) N else M(2) S(2) 6.9 制御の流れを変える文 翻訳を実現するための方法 S → if E then M(1) S(1) N else M(2) S(2) {BACKPATCH(E.T,M(1).Q); BACKPATCH(E.F,M(2).Q); S.N := MERGE(S(1).N, N.N, S(2).N)} N → e {N.N := MAKELIST(NQ); GEN(goto _)}

6.9 制御の流れを変える文 翻訳を実現するための方法 M → e {M.Q := NQ} 6.9 制御の流れを変える文 翻訳を実現するための方法 M → e {M.Q := NQ} S → if E then M S(1) {BACKPATCH(E.T,M.Q); S.N := MERGE(E.F, S(1).N)}

6.9 制御の流れを変える文 翻訳を実現するための方法 S → while M(1) E do M(2) S(1) 6.9 制御の流れを変える文 翻訳を実現するための方法 S → while M(1) E do M(2) S(1) {BACKPATCH(S(1).N, M(1).Q); BACKPATCH(E.T, M(2).Q); S.N := E.F; GEN(goto M(1).Q)} S → begin L end {S.N := L.N}

6.9 制御の流れを変える文 翻訳を実現するための方法 S → A {S.N := MAKELIST()} L → L(1); M S 6.9 制御の流れを変える文 翻訳を実現するための方法 S → A {S.N := MAKELIST()} L → L(1); M S {BACKPATCH(L(1).N, M.Q); L.N := S.N} L → S {L.N := S.N}

6.9 制御の流れを変える文 翻訳を実現するための方法 while (A < B) do 6.9 制御の流れを変える文 翻訳を実現するための方法 while (A < B) do if (C < D) then X := Y + Z 100: if (A < B) goto 102 101: goto 107 102: if (C < D) goto 104 103: goto 100 104: T := Y + Z 105: X := T 106: goto 100: