言語理論とコン パイラ

十回: 意味解析と中間表現

http://www.sw.it.aoyama.ac.jp/2005/Language%20Theory%20and%20Compilers/lecture9.html

AGU

© 2005 Martin J. Dürst 青山学院大学

今日の予定

先週からの宿題

簡単なプログラム言語を bison で実現して、bison の .y ファイルを印刷して提出:

宿題関連のプリント

宿題の要点

言語理論のまとめ

文法 Type 言語 オートマトン
句構造文法 0 句構造言語 チューリング機械
文脈依存文法 1 文脈依存言語 線形拘束オートマトン
文脈自由文法 2 文脈自由言語 プッシュダウンオートマトン
正規文法 3 正規言語 有限オートマトン

構文エラー処理

エラー処理の難しさ

エラー処理の要点

エラー処理の技法

bison でのエラー処理

コンパイラの段階

字句解析 (lexical analysis)

構文解析 (parsing; syntax analysis)

意味解析 (semantic analysis)

最適化 (optimization)

コード生成 (code generation)

中間表現: 名前表

名前表が扱うデータ

中間表現: 構文木

簡単なプログラム言語と簡単なマシーン・アーキテクチャの場合 (例えば Pascal からスタック・マシーン) には構文解析しながらコード生成を行うこともある

構文木の生成: 構文規則ごとの処理で再生する。例えば:

expression: expression '+' term { $$ = $1 + $3; }

を次に変える:

expression: expression '+' term
{ $$ = newnode(PLUS, $1, $3; }

(YYSTYPE も変える)

構文木は普通二分木が、関数の引数などに特別な措置が必要

意味解析