http://www.sw.it.aoyama.ac.jp/2014/Compiler/lecture1.html
O 棟 529 号室
© 2006-14 Martin J. Dürst 青山学院大学
Executive Summary:
If you don't know how compilers work, then you don't know how computers work.
If you're not 100% sure whether you know how compilers work, then you don't know how they work.
理論 | コンパイラ | 他の応用 | |
---|---|---|---|
フロントエンド | 言語理論、オートマトン | 字句解析、構文解析 | 正規表現, XML など |
バックエンド | 最適化、コード生成 |
文字そのもの | XML での表現 (エスケープ) |
' |
' |
" |
" |
< |
< |
> |
> |
& |
& |
どの方向の変更 (→ 又は ←) が難しいか
ソフトからハードへの橋渡し
入力 (input): 人間が分かるプログラム (高級プログラム言語、source (file/program)、ソース (プログラム)、原始プログラム)
出力 (output): 機械が分かるプログラム (object (file/code)、machine code、目的プログラム、実行プログラム)
入力のプログラムの一部:
sum += price * 25;
出力 (アセンブリ言語, assembly language):
LOAD R1, price ; R1 (レジスタ 1) に price という名前の場所からロード
CONST R2, 25 ; R2 (レジスタ 2) に 25 の定数を設定
MUL R1, R1, R2 ; R1 に R1 と R2 の掛け算の結果を入れる
LOAD R2, sum ; R2 に sum という名前の場所からロード
ADD R2, R1, R2 ; R2 に R1 と R2 の合計を入れる
STORE sum, R2 ; sum という名前の場所に R2 の内容を納める
(compiler)
入力のプログラムの一分 (文字の列):
s | u | m | + | = | p | r | i | c | e | * | 2 | 5 | ; | \n |
出力 (記号の列):
id("sum"), plusequal, id("price"), asterisk, int(25), semicolon
入力 (記号の列):
id("sum"), plusequal, id("price"), asterisk, int(25), semicolon
出力 (構文木、syntax tree):
,
, ;
など)
は解析に使われるが出力しないprice = pretax / 100 * (108 - discount);
自動販売機:
状態遷移図 (state transition diagram)
命令文 → 動詞 名詞
動詞 → eat
動詞 → read
動詞 → play
名詞→ bread
名詞→ books
名詞→ music
S → a S o
S → A
A → y a
文法から文の導出 (derivation) の一例:
S → a S o → a a S o o → a a A o o → a a y a o o
S ⇒ a a y a o o
提出期限と場所: 2014年4月 18 17 日 (木) 19:00 まで O棟5階の O-529
号室の前の箱に投入
形式: A4 一枚、表紙なし
課題: 下記一行の C
プログラム断片の字句解析の結果、構文解析の結果、そしてコンパイラの出力
(アセンブリ言語; コメントは必要ない; 引き算は
SUB
、割り算は DIV
)
を、授業の例に習って書きなさい。
grade = english/2 + math - absent*5;