C言語-言語処理プログラム |
言語処理プログラム
「言語処理プログラム」とは、ある種のプログラム言語で記述されたソースプログラムの翻訳、解釈や変換などの機能を持つプログラムである。言語処理プログラムの種類については次の表に簡単にまとめておく。ここでは、インタプリタ型とトランスレータ型について取り上げる。
コンパイラ (翻訳) |
ソースプログラムを実行可能プログラムに変換してから実行する。 | FORTRAN COBOL C |
インタプリタ (解釈) |
1行または1文ずつ実行可能プログラムに変換しながら実行する。 実行速度を改善するために、中間言語と呼ばれる言語に変換してから実行するものもある。 |
BASIC |
アセンブラ (変換) |
1対1に対応させた略号(ニーモニック)をCPUが直接実行できる機械語(2進数)に変換してから実行する。CPUごとに異なる。 | CASL Z80 MASM |
シミュレータ | CASLは、仮想計算機COMET上で実行可能なアセンブリ言語であり、実際には別のコンピュータ(CPU)上で実行させる。 | CASL |
ある言語を別の言語に変換する。例えば、FORTRANをCに変換するソフトウェアなどが有名である。 |
インタプリタ型とトランスレータ型
例えば、次のような三角形の面積を求めるBASICのプログラムを処理する場合を考える。
Teihen=10 Takasa=10 Menseki=50 |
INPUT "Teihen=", T INPUT "Takasa=", H S = T * H / 2 PRINT "Menseki="; S END
インタプリタ型では、命令を判断し、それぞれの命令にあった処理をする。各命令での処理はおおよそ次のとおりである。
トランスレータ型では、命令を判断し、それぞれの命令にあった処理を別の言語で出力する。例えば、C言語に出力すると次のようになる。
上の例では、変数を配列に対応させているが、double a,b,c,…,x,y,zと宣言しておく方法も考えられる。また、BASICの各命令を処理するC言語の関数を用意しておく方法も考えられる。
#include <stdio.h> void main(void) { double a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z; t = b_input("Teihen="); h = b_input("Takasa="); s = t * h / 2; b_prints("Menseki"); b_printn(s); }
上のリストのように変換すると、関数b_input, b_prints, b_printnなどをあらかじめ用意しておく必要があるが、変換するのが比較的簡単になる。
インタプリタ型、トランスレータ型ともに、全体的な処理は、左図のフローチャートのようになる。
命令判定後の各処理は、インタプリタ型では、実際に各命令にあった処理をし、トランスレータ型では、各命令にあった処理を別の言語で出力する処理をする。
Copyright © 2001 Hiroshi Masuda |