このアーカイブには、yaccで記述したPL/0言語のコンパイラPLZ86のソースがおさめてあります。コンパイラは8086のアセンブリ言語ソースを生成します。
アーカイブの圧縮率を高めるために、二重にアーカイブされています。その内容は以下の通りです。
_PL0.LZH PL/0コンパイラのソース(yacc+C) _LIB.LZH ライブラリのソース(8086アセンブリ言語) _SAMPLE.LZH サンプルプログラム集
アセンブラ・リンカとしてr86/lldが必要です。r86/lldは
LSIC-86(試食版を含む)に同梱されています。
ライブラリアンとしてoarが必要です。oarも LSI
C-86 に同梱されてい ます。
コンパイラ本体をコンパイルするために、kmyaccが必要です。kmyaccはFPLのデータライブラリに登録してあります。
コンパイラ本体はC言語で記述されているので、Cコンパイラが必要となります。テストに用いたコンパイラは、Turbo
C++ Ver1.01 と LSI C-86 Ver3.3 です。
結局のところ、LSI C-86 と kmyacc があればよいことになります。ご覧の通り、このコンパイラはエル・エス・アイ ジャパン(株)の公開ツールに全面的に依存しています。素晴らしいツールをフリーソフトウェアとして公開されたエル・エス・アイ ジャパン(株)及び森 公一郎氏に敬意を表するとともに、篤くお礼申し上げます。
N.Wirth の名著+=[*1]に掲載されているPL/0言語の仕様にほぼ準拠しています。異なる点のみを下記に列挙します。
(1) オリジナルのPL/0は手続き本体は任意の文を記述できるが、オケゲム版では複文(begin 〜 end)のみが記述できる。これは、誤りからの復帰を簡単に行えるようにする都合。 (2) オリジナルのPL/0には出力文はなく、その代わりに第入文の結果を印字するようになっているが、オケゲム版では、print 文を設け、第入文で表示を行わないようにした。
【例】 print a; aを印字する
(3) 言語仕様の変更というほどのものではないが、% をソース内に記述すると、その時点のシンボルダンブを表示するようにした。% 自体は空白として扱われる。
[*1] N.Wirth 著、片山訳、アルゴリズム+データ構造=プログラム、日本コンピュータ協会、1979、6000円
適当なファイル名(拡張子は .PL0 とする)でPL/0のソースを作成して下さい。例えばソースファイルが foo.pl0 という名前だとすると、
A>cl foo
という具合に、バッチファイル cl.bat を用いてコンパイルします。文法エラーがなければ、コンパイル・リンクして、foo.exe という実行ファイルを生成します。.comファイルを生成するためのバッチファイル clc.bat も用意しています。cl.bat と clc.bat の違いはスタートアップ・ルーチンだけです。
添付のメイクファイルは下記の開発ツールを前提としています。
LSI C Ver3.3 または Turbo C Ver2.0 または Turbo C++ Ver1.01 kmyacc make (LSI C 付属のものまたは Borland のもの )
LSI C を使用される場合は makefile.lcc を、Turbo C を使用される場合はmakefile.tcc を、それぞれ makefile という名前にリネームして使用して下さい。また、コンパイル時には、yaccpar.c がカレントディレクトリになければなりません。このファイルは、kmyacc に同梱されています。
【コンパイルの手順】 1.全てのアーカイブを展開する A>lha e _* 2.コンパイラ本体をコンパイルする A>make 3.ライブラリを作成する A>make -f pl0lib.mk 4.サンプルをコンパイル・リンク・実行してみる A>cl fib A>fib
ほぼANSI規格の範囲で記述していますので、他のコンパイラ等に移植する のは容易だと思います。
このプログラムは、N.Wirth の決めたPL/0の仕様を元にオケゲムが作成しました。
このプログラムに関する著作権はすべて放棄します。
また、勝手ながら、このプログラムを使用したことによる結果等については、作者は責任を負いかねますので、使用者の責任において利用して下さい。
とくに現在のバージョンにはバグが多く含まれているかもしれないことをお断りしておきます
徳丸浩/ockeghem htokumar@jun.email.ne.jp QGB01521@niftyserve.or.jp hiroshi_tokumaru@msn.com