以前の「プログラミング言語を作りたい」の続きです。
例の「コンパイラ入門」(山下義行著 サイエンス社)を一通り読んで課題のプログラムを作成したので、私なりの内容のまとめと、作成した私のプログラムを解説したいと思います。自分への知識の定着が目的です。問題点や間違えた知識があったらご指摘ください。
今回は、プログラミング言語とはどのようなものか、「プログラミング言語を作る」とはどういうことかを簡単に説明します。
一般的にプログラミング言語といえばC、C++やJava、Pythonなどを思いつきます。これらの言語は「高水準プログラミング言語」と呼ばれ、人にとってのプログラム作成の容易さ・可読性の高さを志向したもので、それ単体の記述のみではプログラムを実行することができません。これに対して「低水準プログラミング言語」と呼ばれるものは、特定のハードウェア・アーキテクチャを反映した構造を持つ言語で、個別の機器が直接解読・実行可能な機械語や、機械語命令の可読性を多少高めたアセンブリ言語が含まれます。また、「中間言語」というものもあり、これは、低水準言語と高水準言語の間を取り持つような性質を持っているとのことです。
「プログラミング言語を作る」と言った時に作るものは、「高水準プログラミング言語の仕様決定とその実行環境」ということになるのではないでしょうか。言い換えれば、「特有の決まりを持った、ある「高水準プログラミング言語」で書かれたプログラムを解析し、(実行可能な形に変換/実行)するもの」を作るといいうことだと思っています。プログラムを最終的に機械が実行可能なコードに変換するものを「コンパイラ」方式、プログラムを解析しながら実行し結果を出力するものを「インタプリタ」方式と言います。その他に「コンパイラ・インタプリタ」や、「JITコンパイラ」と呼ばれるものもあるそうです。
次回以降は、シンプルな仕様の高水準プログラミング言語「SL1」のコンパイラとインタプリタの作成を通して、「プログラミング言語を作る」ことに入門していきたいと思います。
今回はそのような感じです。