このアーカイブには、yaccで記述したPL/0処理系のソースがおさめてあります。処理系はコンパイラとインタプリタの機能を併せ持っています。
N.Wirth の名著+=[*1]に掲載されているPL/0言語の仕様にほぼ準拠しています。異なる点のみを下記に列挙します。
(1)オリジナルのPL/0は手続き本体は任意の文を記述できるが、オケ
ゲム版では複文(begin 〜 end)のみが記述できる。これは、誤りか
らの復帰を簡単に行えるようにする都合。
(2)オリジナルのPL/0には出力文はなく、その代わりに第入文の結果
を印字するようになっているが、オケゲム版では、print
文を設け、
第入文で表示を行わないようにした。
【例】 print a; a
の値を表示する
(3)言語仕様の変更というほどのものではないが、%
をソース内に記述す
ると、その時点のシンボルダンブを表示するようにした。%
自体は空
白として扱われる。
適当なファイル名でPL/0のソースを作成して下さい。例えばソースファイルがfoo.pl0 という名前だとすると、
A>pl0 <foo.pl0
とリダイレクトしないで起動することもできます。この場合は、PL/0のプログラムをキー入力することになります。
添付のメイクファイルは下記の開発ツールを前提としています。
MS-DOSでのコンパイル
LSI C Ver3.3 または Borldnd C++ Ver3.1
kmyacc
make (LSI C 付属のものまたは Borland
のもの )
Window95 / WindowNTでのコンパイル
Visual C++(Ver5でテストしています)
kmyacc
nmake (Visual C++付属のもの)
UNIXでのコンパイル
cc(pcc)またはgcc
yacc(OS添付のもの)
make(OS添付のもの)
LSI C を使用される場合は makefile.lcc を、Borland C++ を使用される場合は makefile.bcc を、Visual C++の場合はmakefile.vcを、UNIXの場合は makefile.uni を、それぞれ makefile という名前にリネームして使用して下さい。また、makeとしてkmyaccをお使いの場合は、コンパイル時に yaccpar.c がカレントディレクトリになければなりません。このファイルは、kmyacc に同梱されています。
ほぼANSI規格あるいはオールドファッションのC言語の範囲で記述していますので、他のコンパイラ等に移植するのは容易だと思います。ANSI規格にない機能として、strdup() 関数を使っています。strdup() が処理系に用意されてない場合には、下記のようにして容易に作成することができます。
char *strdup(s) char *s; { char *p; p = malloc(strlen(s) + 1); if (p != NULL) strcpy(p, s); return p; }
プロトタイプ宣言のありなしを定義済みマクロ
__STDC__ によって切り換えています。プロトタイプ宣言はサポートしているが、__STDC__
が定義されないコンパイラ(LSI C-86
など)では、明示的に __STDC__
を指定して下さい。 makefile.lcc
にはこの指定が含まれています。
UNIXとMS-DOSでは、yaccの生成するヘッダファイル名が異なります。このために、定義済みマクロ
MSDOS によってこれらを区別しています。MS-DOS上で、マクロ
MSDOS が定義されないコンパイラを使用される場合は、MSDOS
を明示的に定義して下さい。添付の makefile
には、この指定が含まれています。
5.著作権・免責等
このプログラムは、N.Wirth の決めたPL/0の仕様を元にオケゲムが作成しました。
このプログラムに関する著作権はすべて放棄します。
また、勝手ながら、このプログラムを使用したことによる結果等については、作者は責任を負いかねますので、使用者の責任において利用して下さい。
とくに現在のバージョンにはバグが多く含まれているかもしれないことをお断りしておきます
N.Wirth 著、片山訳、アルゴリズム+データ構造=プログラム、日本コンピュータ協会、1979 |
徳丸浩/ockeghem
htokumar@jun.email.ne.jp
QGB01521@niftyserve.or.jp
hiroshi_tokumaru@msn.com