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

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
言語処理系(2) 金子敬一.
和田俊和 資料保存場所 /2/26 文法と言語 ー正規表現とオートマトンー 和田俊和 資料保存場所
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
基本情報技術概論 I 演習(第5回) 埼玉大学 理工学研究科 堀山 貴史
言語処理系(1) 金子敬一.
第6回条件による分岐.
言語処理系(7) 金子敬一.
4章 制御の流れ-3.
コンパイラ 2011年10月17日
言語処理系(4) 金子敬一.
言語処理系(6) 金子敬一.
プログラミング基礎I(再) 山元進.
言語処理系(3) 金子敬一.
文法と言語 ー文脈自由文法とLR構文解析2ー
コンパイラ 第9回 コード生成 ― スタックマシン ―
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
文法と言語 ー文脈自由文法とLL構文解析ー
プログラミング言語論 第4回 式の構文、式の評価
プログラミング言語論 プログラミング言語論 プログラミング言語論 演習1 解答と解説 演習1解答と解説 1 1.
言語処理系(5) 金子敬一.
言語処理系(9) 金子敬一.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
コンパイラ 2012年10月15日
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
情報処理Ⅱ 第4回 2007年10月29日(月).
トキのカタチ2016 電子工作(Arduino)講習
言語プロセッサ2015 Language Processors 2015
プログラミング言語論 第2回 情報工学科 篠埜 功.
コンパイラ 第14回 上昇型構文解析(2) 38号館4階N-411 内線5459
プログラムの制御構造 選択・繰り返し.
言語プロセッサ 第7回目 平成27年11月16日.
プログラミング言語論プログラミング言語論 プログラムの意味論 水野嘉明
目的コードの生成 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第9章.
B演習(言語処理系演習)第8回 評価器 田浦.
コンパイラ 第13回 上昇型構文解析(1) 38号館4階N-411 内線5459
言語プロセッサ 第8回目 平成22年11月22日.
 型推論1(単相型) 2007.
言語と文法 言語とは,ルールに従う記号列の無限集合である. 文法を与えることで言語が定義できる.
コンパイラ 2011年10月6日
文法と言語 ー文脈自由文法とLR構文解析2ー
文法と言語 ー文脈自由文法とLR構文解析3ー
フロントエンドとバックエンドのインターフェース
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
文法と言語 ー文脈自由文法とLL構文解析ー
コンパイラ 2011年10月20日
コンパイラ 2012年10月4日
文法と言語 ー文脈自由文法とLR構文解析ー
コンピュータアーキテクチャ 第 2 回.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
コンピュータアーキテクチャ 第 2 回.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
プログラミング言語論 第2回 篠埜 功.
情報処理Ⅱ 2005年10月28日(金).
言語プロセッサ 第12日目 平成20年1月9日.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
プログラミング 4 文字列.
文法と言語 ー文脈自由文法とLR構文解析2ー
情報処理Ⅱ 第2回 2004年10月12日(火).
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
1.2 言語処理の諸観点 (1)言語処理の利用分野
情報処理Ⅱ 2006年10月27日(金).
構文主導翻訳.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
4.2 再帰下降解析 (1)再帰下降解析とは ■再帰下降解析(Recursive Descent Parsing)
Presentation transcript:

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

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

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

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

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

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

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}

6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ 3 - 2 I I 23 - 2 電卓の実現 S→E$ E→E(1)+E(2) 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 - 2 I I 23 - 2

6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ E 5 I - 5 * - E I 115 23 電卓の実現 S→E$ 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 5 I - 5 * - E I 115 23

6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ E 4 I - 4 + - E 119 115 電卓の実現 S→E$ 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 4 I - 4 + - E 119 115

6.2 構文主導型翻訳系の実現 2 3 * 5 + 4 $ 答えは119 $ - E S 119 - 電卓の実現 S→E$ 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 -

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

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

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 + *

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

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

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)}

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

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

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

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

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

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

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

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

ちょっと休憩 (雑談)

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

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

休憩おわり

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

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

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:=[ ]}

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}

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 実数型 整数型