0.はじめに PL/0 シリーズの第・・・何段か、既に分からなくなってしまいましたが、PL/0 にオブジェクト指向の要素を取り入れた言語および処理系です。名付けて Objctive PL/0。 この言語には次のような特徴があります。 ・すべてのデータはオブジェクトであり、演算や手続き呼出しなどはすべて メッセージにより実現しています。 ・変数には型がありません。型(クラス)はオブジェクト自身が持ちます。 ・非常に簡潔な文法なので習得しやすい。その代わり役には立たない。 ・Object を究極のスーパークラスとするツリー型のクラス階層(単純継承 のみ) 処理系は yacc と UNIX V7 準拠の C 言語で記述されています。 組込のクラスとメソッドが少ないので、あまり楽しめないかもしれませんが、 せいぜい遊んでやって下さい。 1.このアーカイブの内容 このアーカイブには、PL/0 言語にオブジェクト指向の機能を持たせた言語、 Objective PL/0 コンパイラのソースがおさめてあります。コンパイラは拡張 PL/0 機械コード(P コードの一種)を生成し、Objective PL/0 仮想機械により 実行されます。 アーカイブは圧縮率を高めるために、二重にアーカイブされています。その内 容は以下の通りです。 _SOU.LZH Objective PL/0 コンパイラのソース(yacc+C) _PL0.LZH 初期化ファイルとサンプルプログラム集 2.Objective PL/0 で遊ぶために必要なもの コンパイラ本体をコンパイルするために、kmyacc が必要です。kmyacc は FPL のデータライブラリに登録してあります。 コンパイラ本体は C 言語で記述されているので、使用にあたっては、C コンパ イラが必要となります。テストに用いたコンパイラは、Borland C++ 3.1 と LSI C-86Ver3.30c、UNIX cc (SUN OS 4.1.3)です。その他のコンパイラに対する移植 は容易であろうと思います。 3.言語仕様 N.Wirth の名著+=[*1]に掲載されている PL/0 言語の仕様を参考にしていま すが、オブジェクト指向の機能を全面的に採用したために文法は大幅に改変され ています。言語仕様は、OPL0.DOC を参照して下さい。 [*1] N.Wirth 著、片山訳、アルゴリズム+データ構造=プログラム、日 本コンピュータ協会、1979、6000円 4.使用法 適当なファイル名(拡張子は任意だが、.pl0 を標準とする)で Objective PL/0 ソースを作成して下さい。例えばソースファイルが foo.pl0 という名前だ とすると、 A>opl0 foo.pl0 という具合に起動します。 起動時のオプションはありません。カレント・ディレクトリに _init.pl0 とい うファイルが必要です。このファイルは、アーカイブに同梱されています。 5.コンパイルの方法 添付のメイクファイルは下記の開発ツールを前提としています。 Borland C++ or Turbo C++ or LSI C-86 or pcc (unix) yacc (bison, kmyacc 2.0) make(Borland C++ 付属のものか LSI C 付属のもの, UNIX 付属のもの) 全てのソースを作業ディレクトリに置き、make するだけです。コンパイル時 には、yaccpar.c がカレントディレクトリになければなりません(kmyacc 2.0使 用時)。このファイルは、kmyacc に同梱されています。 【コンパイルの手順】 (1) 全てのアーカイブを展開する A>lha e _* (2)Objective PL/0 コンパイラをコンパイルする A>make (3) サンプルをコンパイル・実行してみる A>opl0 fib.pl0 ほぼ UNIX V7 準拠の C 言語、ないしは ANSI C の範囲で記述していますので、 他のコンパイラ等に移植するのは容易だと思います。 6.著作権・免責等 このプログラムは、N.Wirth の決めた PL/0 の仕様を元にオケゲムが作成しま した。コードの一部に、きだあきら氏による拡張 PL/0 のコードを流用させてい ただいております。記して感謝の意を表します。 このプログラムに関するオケゲムに属するべき著作権はすべて放棄します。ま た、きだあきら氏が作成した部分も Public Domain 宣言されています。このた め、プログラム全体でも Public Domain です。 勝手ながら、このプログラムを使用したことによる結果等については、作者は 責任を負いかねますので、使用者の責任において利用して下さい。 とくに現在のバージョンにはバグが多く含まれているかもしれないこと、機能 仕様や実現方法を将来大幅に変更する可能性が高いことをお断りしておきます ockeghem /松田晋 (MIX ockeghem) (Nifty QGB01521) (PC-VAN LFA60821) (ASCII net59329)