1.このアーカイブの内容

 このアーカイブには、PL/0 言語に並行処理の機能を持たせた言語、Concurrent PL/0(以下、C.PL/0 と略す)のソースがおさめてあります。コンパイラは拡張PL/0 機械コード(Pコードの一種)を生成し、PL/0 インタプリタにより実行されます。
 アーカイブの圧縮率を高めるために、二重にアーカイブされています。その内容は以下の通りです。

 _PL0.LZH C.PL/0 コンパイラのソース(yacc+C)
 _SAMPLE.LZH サンプルプログラム集

2.C.PL/0 で遊ぶために必要なもの
 コンパイラ本体をコンパイルするために、kmyacc が必要です。kmyacc はFPLのデータライブラリに登録してあります。
 コンパイラ本体はC言語で記述されているので、Cコンパイラが必要となります。テストに用いたコンパイラは、Turbo C++ Ver1.01 のみです。LSI C-86Ver3.3 では、interpreter が out of memory になり、コンパイルできません。
 interpreter は巨大な(でもないと思うのだが)switch 文なので、分割も困難です。LSI C-86 ユーザには申し訳ないと感じながらも、そのまま投稿することにします。

3.言語仕様

 N.Wirth の名著+=[*1]に掲載されているPL/0言語の仕様を大幅に拡張しています。変更内容は、CPL0.DOC を参照して下さい。

  [*1]  N.Wirth 著、片山訳、アルゴリズム+データ構造=プログラム、日
        本コンピュータ協会、1979、6000円

4.使用法

適当なファイル名(拡張子は任意だが、.pl0 を標準とする)で C.PL/0 ソースを作成して下さい。例えばソースファイルが foo.pl0 という名前だとすると、

    A>cpl0 foo.pl0

という具合に起動します。
 起動時のオプションは3つあります。

        -s      入力ソースを表示する。
        -c      コンパイル後のコードを表示する。
        -x      コンパイルが成功したら実行する。

 旧版との互換性のため、なにも指定しなかった場合は、-s -c -x が全て指定されたものとみなします。オプションの指定は、きだあきら氏による拡張 PL/0 の仕様に準じました。

5.コンパイルの方法

 添付のメイクファイルは下記の開発ツールを前提としています。

        Turbo C Ver2.0 または Turbo C++ Ver1.01
        kmyacc
        make (LSI C 付属のもの )

  全てのソースを作業ディレクトリに置き、make するだけです。コンパイル時には、yaccpar.c がカレントディレクトリになければなりません。このファイルは、kmyacc に同梱されています。

【コンパイルの手順】

(1)全てのアーカイブを展開する

    A>lha e _*

(2)C.PL/0 コンパイラをコンパイルする

    A>make

(3)サンプルをコンパイル・実行してみる

    A>cpl0 philo.pl0

 ほぼANSI規格の範囲で記述していますので、他のコンパイラ等に移植するのは容易だと思います。

6.著作権・免責等

  このプログラムは、N.Wirth の決めたPL/0の仕様を元にオケゲムが作成しました。コードの一部に、きだあきら氏による拡張 PL/0 のコードを流用させていただいております。記して感謝の意を表します。
 このプログラムに関するオケゲムに属するべき著作権はすべて放棄します。まだ、きだあきら氏が作成した部分も Public Domain 宣言されています。このため、プログラム全体でも Public Domain です。
 勝手ながら、このプログラムを使用したことによる結果等については、作者は責任を負いかねますので、使用者の責任において利用して下さい。
 とくに現在のバージョンにはバグが多く含まれているかもしれないことをお断りしておきます。

 徳丸浩/ockeghem

htokumar@jun.email.ne.jp
QGB01521@niftyserve.or.jp
hiroshi_tokumaru@msn.com