翻訳の手順
プログラミング言語の文法に従って記述されたソースプログラムは,コンパイルされて目的プログラムになり,連係編集されてロードモジュールになります。
- コンパイル
- プログラミング言語の文法に従って記述されたプログラムをソースプログラムあるいは原始プログラムといいます。通常の高水準言語では,ソースプログラムをいったんアセンブラ言語に翻訳する必要があります。それをコンパイルといい,コンパイルするソフトウェアをコンパイラといいます。それで,高水準言語のことをコンパイラということもあります。
コンパイルされた結果を目的プログラムあるいはオブジェクトモジュールといいます。これは通常はアセンブラ言語になっています。ですから,アセンブラ言語で記述されたソースプログラムは,それ自体が目的プログラムになります。
- 連係編集
- 高水準言語では,全体の処理を一つのプログラムとして記述するのではなく,ロジックをいくつかのサブプログラムに分解し,それらをつなぎ合わせてプログラムにする方法が取られます。それらのサブプログラムは部品として他のプログラムにも利用されることがあります。また,言語プロセッサは多様な共通利用サブプログラムを多く持っています。それらはライブラリとして保管されています。
連係編集とは,作成した目的プログラムとライブラリにある既存の目的プログラム群を組み合わせて,一つの機械語プログラムに翻訳します。この機械語プログラムのことを実行可能プログラムあるいはロードモジュールといいます。すなわち,機械語で作成したソースプログラムは,それ自体がロードモジュールになっています。
この翻訳プログラムを連係編集プログラムあるいはリンケージ・エディタといいます。言語プロセッサとしてのアセンブラはこの機能を持っています。なお,目的プログラムでは高水準言語の特性は失われますので,COBOLで作成した目的プログラムとFORTRANで作成したライブラリを連係することもできます。
実行による言語プロセッサの区分
翻訳の方法にはコンパイラ以外にインタプリタやジェネレータなどもあります。
- コンパイラ
- 多くの高水準言語はコンパイラ方式です。この特徴は,ソースプログラムの全体を一つのかたまりとして翻訳しロードモジュールとして実行します。
- プログラム全体を作成しないと実行させてチェックすることができないし,プログラムの一部を修正したときも,全体を翻訳する必要があります。そのために,1回しか使わないようなプログラムを作成するのには非効率です。
- 逆に,1回ロードモジュールを作成しておけば,実行時に毎回コンパイルする必要がありませんので,何度も利用するプログラムに適しています。
- インタプリタ
- インタプリタは,ソースプログラムを1行づつ翻訳して実行する方式です。代表的なインタプリタ言語にBASICがあります(コンパイラのBASICもあります)。
プログラムを一部作成して実行し逐次追加修正するのが容易ですから,プログラムを作成する段階では便利な方式です。
しかし,実行のたびに翻訳をする必要があるので,何度も利用するプログラムでは非効率です。また,大量のデータを用いるプログラムでは,一つのデータを処理するたびに翻訳することが起こりますので,処理が非効率になります。
- ジェネレータ
- プログラムの一部をパラメタとして与えることにより,完成したプログラムを出力する方式です。これにはソースプログラムを出力してコンパイルするものと,既に実行可能プログラムがあり最初にパラメタを読み込み,それを用いてデータを読み込み帳票作成などをするようなものがあります。