カテゴリー
コンピュータ言語

コンパイラの構成~プログラミング言語を作りたい(再)③~

 前回は「プログラミング言語をつくる」ことの概略について説明し、その中でコンパイラについて簡単に説明しました。今回は、より具体的なコンパイラの構成について説明していきたいと思います。今回の内容は「コンパイラ入門」(山下義行著 サイエンス社)、コンパイラの理論と作成技法(大山口通夫・三橋一郎共著 サイエンス社)を参考にさせていただいております。毎度のことですが、問題点や間違えた知識があったらご指摘ください。

 前回、コンパイラはプログラムを最終的に機械が実行可能なコードに変換するものと説明しました。この変換を実行するためにコンパイラは主に、①字句解析、②構文解析、③意味解析、④コード最適化、⑤コード生成の五つの部分システムを有しており、①~③はフロントエンド、④と⑤はバックエンドと呼ばれています。

 ①字句解析部は、入力されたプログラムを文法上の基本単位であるトークン(字句)に分解・分類するシステムです。例えるならば、英文を読み取り、それをそれぞれの単語に分解し、かつ名詞や動詞などに分類を行ってくれるシステムということです。プログラミング言語を作るという観点では、字句解析部ではプログラミング言語の単語(トークン、字句)と分類を定めることが主な仕事になります。例えばC言語で定められたトークンは「キーワード」「識別子」「定数」「文字列リテラル」「区切り子(演算子)」に分類されています。

 ②構文解析部は、①字句解析部で分割・分類されたトークンの列を順次読み取り、それらがプログラミング言語の文法規則に従っているかを解析し、かつ、プログラム構造を抽象化した構文木を作成するシステムです。プログラミング言語を作る際は、ここではプログラミング言語の構文規則を決定することになります。(ここが一番プログラムの「外見」を決めるものとなると思いますが、文法を考えるのは難しそうですねぇ……。まだ何も思いつかん……。)

 ③意味解析部は、プログラムの文法構造を抽象化した構文木を補間し、のちに続くコード作成が可能な状態にするシステムです。ここで補間される情報とは、例えば変数の型(整数型・浮動小数点型等)情報などです。

 ⑤コード生成とは、意味解析部で作成された意味付き構文木から、それに対応する機械語やアセンブリ言語のコードを作り出すシステムで、④コード最適化は、最終的に生成されるコードをより効率的なもの(実行時間が短いもの)にするためのシステムです。

 今回はコンパイラの主な構成について説明しました。今後は主にフロントエンドの開発について話していくことになるかと思います。考えていた以上にプログラムの話に行きませんね。がんばります。

そんな感じでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です