言語理論とコンパイラ

第一回、2005年 4月15日、Martin J. Dürst

自己紹介

授業の位置付け

授業の内容

理論 コンパイラ 他の応用
フロントエンド 言語理論、オートマトン 字句解析、構文解析 regexp, XML
バックエンド 最適化、コード生成

コンパイラの役割

ソフトからハードへの橋渡し

入力: 人間が分かるプログラム (高級プログラムイング言語、ソース言語、原始言語)

出力: 機械が分かるプログラム (目的プログラム、実行プログラム)

コンパイラの仕事の一例

入力のプログラムの一分:

sum += price * 25;

出力:

LOAD   price, R1
LOAD   25, R2
MUL    R1, R2, R1
LOAD   sum, R2
ADD    R1, R2, R2
STORE  R2, sum

コンパイラの論理的構造

[プリプロセッサ (preprocessor) ]
字句解析 (lexical analysis)
構文解析 (parsing; syntax analysis)
意味解析 (semantic analysis)
最適化 (optimization)
コード生成 (code generation)
[アセンブラ (assembler)]
[リンカ (linker)・ローダ (loader) ]

コンパイラの種類と関連物

字句解析の一例

入力のプログラムの一分 (文字の列):

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

statement (+= (sum, * (price, 25))



オートマトンの一例

自動販売機:




状態遷移図 (state transition diagram)

言語と文法

形式言語の文法の一例

文法から文の導出 (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