言語プロセッサ 第12日目 平成20年1月9日.

Slides:



Advertisements
Similar presentations
1 プログラム言語 と 言語プロセッ サ 基本情報技術概論 II ( 第1回 ) 埼玉大学 理工学研究科 堀山 貴史.
Advertisements

東京工科大学 コンピュータサイエンス学部 亀田弘之
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
言語処理系(1) 金子敬一.
コンパイラ 第13回 最適化 38号館4階N-411 内線5459
コンパイラ 2011年10月17日
ファーストイヤー・セミナーⅡ 第8回 データの入力.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
コンパイラ 第1回 コンパイラの概要 38号館4階N-411 内線5459
コンパイラ 第9回 コード生成 ― スタックマシン ―
2012年度 計算機システム演習 第4回 白幡 晃一.
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
言語処理系(8) 金子敬一.
プログラミングIII演習 第1回目.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
6.4 コード最適化 (1)コード最適化(code optimization)
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
コンパイラ 2012年10月15日
「ソフトウェアのしくみ」.
言語プロセッサ2015 Language Processors 2015
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
言語プロセッサ 第7回目 平成27年11月16日.
目的コードの生成 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第9章.
勉強会その3    2016/5/1 10 8分35秒 データの表現 演算.
FlexとBison+アルファ -実習編-
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
東京工科大学 コンピュータサイエンス学部 亀田弘之
TA 高田正法 B10 CPUを作る 3日目 SPIMの改造 TA 高田正法
コンパイラ 第13回 上昇型構文解析(1) 38号館4階N-411 内線5459
第13 最終課題発表 2009年07月14日(火曜日) 第4時限目 λ11教室
東京工科大学 コンピュータサイエンス学部 亀田弘之
言語プロセッサ 第8回目 平成22年11月22日.
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
比較プログラム言語論 平成17年5月11日 森田 彦.
東京工科大学 コンピュータサイエンス学部 亀田弘之
東京工科大学 コンピュータサイエンス学部 亀田弘之
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
コンパイラ 2011年10月20日
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
C言語 はじめに 2016年 吉田研究室.
2010年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
プログラミング演習I 2003年4月30日(第3回) 木村巌.
東京工科大学 コンピュータサイエンス学部 亀田弘之
コンピュータアーキテクチャ 第 2 回.
2013年度 プログラミングⅠ ~ 内部構造と動作の仕組み(2) ~.
コンピュータアーキテクチャ 第 2 回.
コンピュータアーキテクチャ 第 5 回.
ネットワーク・プログラミング Cプログラミングの基礎.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
コンピュータアーキテクチャ 第 5 回.
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
コンパイラ 2012年10月11日
エクセル(3)の目次 参照演算子と演算子 参照セルの表示法 セルの参照方法 エラーについて シグマ(Σ)関数 条件付書式 問題(1)
2008年度 情報科学序論 ~ 内部構造と動作の仕組み(2) ~.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
C#プログラミング実習 第1回.
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
Presentation transcript:

言語プロセッサ 第12日目 平成20年1月9日

コード生成の概要 原始プログラム 目的コード 字句解析 構文解析 意味解析 中間コード生成 コード生成 最適化 中間コード 中間コード

コード生成の概要 目的言語 原始プログラム 目的コード 字句解析 構文解析 意味解析 中間コード生成 コード生成 最適化 中間コード 中間言語

目的言語 絶対形式2進コード 再配置可能コード(相対形式2進コード) アセンブラ言語プログラム など

1.絶対形式2進コード 命令のオペランドの番地指定が、絶対番地になっている2進の機械コード

2.再配置可能コード 命令のオペランドの番地指定がプログラムの先頭からの相対番地になっているもの

3.アセンブラ言語プログラム 命令やオペランド、番地指定が記号で指定されているもの

選択基準 教育用コンパイラ 一般のコンパイラ UNIXやLinuxのCコンパイラ 絶対形式2進コードを採用し、コンパイル即実行方式(compile-and-go方式)。 一般のコンパイラ 再配置可能2進コードを採用し、リンカ(linker)やローダ(loader)により、相対番地の絶対番地への変換等を行う方式。 UNIXやLinuxのCコンパイラ アセンブラ言語プログラムを生成する方式。

例1: ( -, y, z, x ) MOV Y, R1 % Y → register R1 SUB Z, R1 % R1 - Z → R1 MOV R1, X % R1 → X

例2: 次の中間言語で書かれたコード列を、目的コード列に変換してみると… (+,B,C,A) (+,A,E,D)

例2: (+,B,C,A) (+,A,E,D) 次の中間言語で書かれたコード列を、目的コード列に変換してみると… MOV B, R1 ADD C, R1 MOV R1, A MOV A, R1 ADD E, R1 MOV R1, D

例2: (+,B,C,A) (+,A,E,D) 次の中間言語で書かれたコード列を、目的コード列に変換してみると… MOV B, R1 ADD C, R1 MOV R1, A MOV A, R1 ADD E, R1 MOV R1, D 冗長! 機械的変換は危険

例3:(+,A,1,A) MOV A, R1 ADD #1, R1 MOV R1,A INC A 命令を上手く選ぶ とより最適なコードが 生成されることがある。

練習問題1 式 ( X + Y ) / ( Z - U*V ) に対して以下の問に答よ。なお、割当て可能なレジスタは R1とR2の2個だけとする。 この式の目的コードを生成せよ。 生成した目的コードが最適化できるか検討し、最適化できる場合は、その最適化目的コードを作成せよ。 (ヒント:分母から計算するようにしてみよ。)

目的コードレベルでの最適化 コードの最適化はあらゆる局面で実施することが多い。以下では、目的コードレベルでの最適化の1例(のぞき穴最適化, peephole optimization)を示す。

のぞき穴最適化 冗長な命令の除去 機械(命令セット)の特徴の活用 制御の流れの最適化 など

1.冗長な命令の除去(例1) MOV R1, X MOV X, R1 MOV R1, X 冗長な命令の除去

1.冗長な命令の除去(例2) ADD 0, R1 MUL 1, R1 ともにいつでも除去可能

2.機械(命令セット)の 特徴の活用の例 X = X + 1 に対して、インクリメント命令INCがあれば、 INC X とする。

3.制御の流れの最適化(例1) 目的コード: JUMP Label1 ・・・ Label1: Op 最適化: 最適化

3.制御の流れの最適化(例2) JUMP L1 ・・・ L1: JUMP L2 JUMP L2

練習問題2  次のコード列に対して、(共通部分式の除去による)最適化を行いなさい。 A = C ー D B = C C = B ー D

まとめ

abc := xyz + abc * 123 (読み込み)

abc := xyz + abc * 123; トークンへの分解(字句解析) ( 変数1, abc ) ( 代入記号, := ) ( 変数2, xyz ) ( 加算記号, + ) ( 変数1, abc ) ( 乗算記号, * ) ( 定数1, 123 ) ( 文区切り記号, ; )

abc := xyz + abc * 123 (構文解析) 代入記号 変数1 加算記号 変数2 乗算記号 変数1 定数1

abc := xyz + abc * 123 整数型 整数型 整数型 整数型 整数型 整数型 整数型 (意味解析) 代入記号 変数1 加算記号 整数型 整数型 変数2 乗算記号 整数型 変数1 定数1 整数型 整数型

abc := xyz + abc * 123 4つ組への変換(中間コード生成) (乗算,変数1,定数1,一時変数1) (加算,変数2,一時変数1,一時変数2) (代入,一時変数2,変数1,0) (*,abc,123,t1) (+,xyz,t1,t2) (:=,t2,abc,0) そこにはデータがないことを意味することとする。

abc := xyz + abc * 123 (*,abc,123,t1) (+,xyz,t1,t2) (:=,t2,abc,0) (最適化) 中間言語レベルでの最適化はいまは特になし。 (*,abc,123,t1) (+,xyz,t1,t2) (:=,t2,abc,0)

abc := xyz + abc * 123 MOV abc, R1 MUL #123, R1 MOV R1, t1 MOV xyz, R1 (目的コード生成) MOV abc, R1 MUL #123, R1 MOV R1, t1 MOV xyz, R1 ADD t1, R1 MOV R1, t2 MOV t2, abc (*,abc,123,t1) (+,xyz,t1,t2) (:=,t2,abc,0) 目的コードへの変換

abc := xyz + abc * 123 最適化 (目的コードレベルの最適化) MOV abc, R1 MUL #123,R1 MOV R1, t1 MOV xyz, R1 ADD t1, R1 MOV R1, t2 MOV t2, abc MOV abc, R1 MUL #123,R1 ADD xyz, R1 MOV R1, abc 最適化 これが最終出力

自主レポート課題 課題: コンパイラ自動生成器としてYaccやBisob以外にどのようなものがあるのか調べなさい。 (例:Rie など) 提出期限:平成20年2月7日(木)17:00 提出場所:研A6階八王子側エレベータを降りて右手窓前にあるレポートボックス。 書式:A4レポート用紙(表紙に氏名・学籍番号・提出日を明確な文字にて記載すること) その他 枚数等は特に指定しない。

以上 試験に関して 試験日:平成19年1月23日(水)3限目 (60分)持ち込み付加 試験日:平成19年1月23日(水)3限目      (60分)持ち込み付加 試験対策用の問題集を1月12日までにWebに挙げておきます。良く練習しておくこと。 ( url:kameken.clique.jp/compiler/ ) 以上