コンパイラの内部処理

コンパイラの内部処理

コンパイラでは、字句解析、構文解析、意味解析、コード最適化、コード生成といったフェーズに分かれて順に処理が進む。

字句解析

字句解析とは、広義の構文解析の前半の処理で、自然言語の文やプログラミング言語ソースコードなどの文字列を解析して、後半の狭義の構文解析で最小単位(終端記号)となっている「トークン」(字句)の並びを得る手続きである。

例えば、ソースコード中の「let x := 100」という記述において「let」というキーワードや「100」という数字列は、それでひとつの意味を持つカタマリであり、それ以上細かく意味を持たない。このようなカタマリのことを「トークン」という。また let と x の間にある空白など一般に空白類は、意味があるとしても、それがないと繋がってしまう場合に切り離す以上の意味は普通は無く、構文規則には通常そういったものは含めない。

構文解析

構文解析とは、字句解析でできたトークンをもとに、意味のわかる形式(e.g. AST(Abstract Syntax Tree)) に変換することである。構文解析では、字句を意味がわかる木の形(構文木)にする。構文解析を行なうプログラムのことを パーサ(parser)と呼ぶ。

意味解析

意味解析は、ソースコード内に記述された変数の型や文(ステートメント)が言語の記述仕様に沿っているかどうかをチェックする。その後、コード生成、最適化の手順を経て目的プログラムが作成される。ここで得た情報は記号表として、ソースコードに使われる記号の意味を記録される。

コード最適化

実行時により早く実行できるように無駄をなくしたり、オブジェクトのコードのサイズをできるだけ小さくするように無駄をなくす処理をする。

コード生成

オブジェクトコードを生成する。