LoginSignup
3
2

More than 1 year has passed since last update.

Pascal-P シリーズについて

Last updated at Posted at 2020-11-21

はじめに

Pascal-P は CDC 6000 用 コンパイラ作成研究の一環として、チューリッヒ工科大学で 1973 年頃に作られた Pascal のサブセット実装です。

Pascal-P は仮想的なスタックコンピュータ用のオブジェクトコードを生成する P-Code コンパイラ と、そのオブジェクトコードを解釈して実行する P-Code インタプリタ で構成されています。

スタックマシンとコンパイラの概要レポートとして、K.V. Nori、U. Ammann、K. Jensen、H. Nägeli らによって 1974 年に書かれた 『The PASCAL "P" compiler: Implementation notes』 があります。

See also:

より正確な Pascal-P の動作

「P-Code の "P" って何」 という話ですが、これは Pseudo (疑似) を意味するようです。つまり P-Code とは仮想マシン用の疑似コードを指します。

・P-Code コンパイラ (PCOM)

Pascal のソースコードを P-Code 用のアセンブラソース (中間形式ファイル) へコンパイルします (翻訳系)。直接 P-Code を吐くものではありません。

・P-Code インタプリタ (PINT)

P-Code 用のアセンブラソースを P-Code へとアセンブルし (直訳系)、メモリ上に展開された P-Code を逐次実行します (通訳系)。

Pascal-P シリーズ

以下 Pascal-P シリーズの概要です。
それぞれのバージョンの概要は『Pascal Users Group Newsletter #4』P.81 に記述があります。

See also:

■ Pascal-P1

1973 年リリース。現存しません。時期的に、言語仕様としては 『Revised Report (1973)』 を元にして作成されたのだろうと思われます。

See also:

■ Pascal-P2

1974 年リリース。SourceForge でソースコードをダウンロードできます。

作者名はソースコードのヘッダに次のようにクレジットされています。

プログラム 作者名
P-Code コンパイラ U. Ammann
P-Code インタプリタ K. Jensen、N. Wirth

P-Code インタプリタの方は Scott A. Moore 氏がソースコードに手を加えていますが、これは CDC 6000 の構造に依存している部分を取り除くためだと思われます。

UCSD Pascal (Apple II や Apple III の Pascal を含む) は、この Pascal-P2 を参考としています。Turbo PascalUCSD Pascal を参考にしているため、巡り巡って Delphi にも Pascal-P2 の制限が残っていたりします 1

See also:

■ Pascal-P3

1976 年リリース。現存しません。後述する Pascal-P4 と並行して作られたようです。Pascal-P2 との互換性を重視したバージョンだったようです。

■ Pascal-P4

1976 年リリース。SourceForge でソースコードをダウンロードできます。

作者名はソースコードのヘッダに次のようにクレジットされています。互換性よりも効率を重視したバージョンです。

プログラム 作者名
P-Code コンパイラ U. Ammann、K.V. Nori、Ch. Jacobi
P-Code インタプリタ K. Jensen、N. Wirth、Ch. Jacobi

pcomOrg.paspintOrg.pas がオリジナルのソースです。pcom.paspint.pas は Scott A. Moore 氏が手を加えたバージョンです。

P4 コンパイラが吐くエラーコードの一覧表は『Pascal User Manual and Report (第 2 版)』または『Pascal の言語処理系』にしか載っていません。

Apple の Lisa に搭載された Pascal は、この Pascal-P4 がベースとなっています。『MCC (マイクロコンピュータ振興センター) Pascal』も Pascal-P4 ベースのようです 2

See also:

・Pascal-P4 のソースコードヘッダ

さて、Pascal-P4 のソースコードヘッダには興味深いことが書いてあります。

(*$c+,t-,d-,l-*)
 (***********************************************
  *                                             *
  *      Portable Pascal compiler               *
  *      ************************               *
  *                                             *
  *             Pascal P4                       *
  *                                             *
  *     Authors:                                *
  *           Urs Ammann                        *
  *           Kesav Nori                        *
  *           Christian Jacobi                  *
  *     Address:                                *
  *       Institut Fuer Informatik              *
  *       Eidg. Technische Hochschule           *
  *       CH-8096 Zuerich                       *
  *                                             *
  *  This code is fully documented in the book  *
  *        "Pascal Implementation"              *
  *   by Steven Pemberton and Martin Daniels    *
  * published by Ellis Horwood, Chichester, UK  *
  *         ISBN: 0-13-653-0311                 *
  *       (also available in Japanese)          *
  *                                             *
  * Steven Pemberton, CWI/AA,                   *
  * Kruislaan 413, 1098 SJ Amsterdam, NL        *
  * Steven.Pemberton@cwi.nl                     *
  *                                             *
  ***********************************************)

「also available in Japanese」...? そうなんです、この Pascal-P4 ソースコードには完全な日本語ドキュメントが存在するのです。

・書籍『Pascal の言語処理系』

Pascal-P4 の実装を詳細に解説した書籍があります。
image.png

タイトル 著者 ISBN-10
(Amazon)
出版年
Pascal Implementation: The P4 Compiler スティーブン・ペンバートン(著)
マーチン・ダニエルズ(著)
0853123586 1982/1/1
Pascal Implementation: Compiler and Assembler Interpreter スティーブン・ペンバートン(著)
マーチン・ダニエルズ(著)
085312437X 1982/1/1
Pascal Implementation The P4 Compiler / Compiler and Assembler Interpreter スティーブン・ペンバートン(著)
マーチン・ダニエルズ(著)
0136530311 1983/1/1
Pascal Implementation: The P4 Compiler / Compiler and Assembler Interpreter スティーブン・ペンバートン(著)
マーチン・ダニエルズ(著)
0853125899 1983/1/12
Pascal の言語処理系 Pascal-P4 / 翻訳系・直訳系/通訳系 スティーブン・ペンバートン(著)
マーチン・ダニエルズ(著)
武市正人(訳)
木村友則(訳)
47690098X 1984/9/1

書籍は函 (はこ) に入った二冊で構成されています。

・Pascal-P4
image.png
・翻訳系・直訳系/通訳系
image.png

本書は 『Pascal Implementation: The P4 Compiler / Compiler and Assembler Interpreter』 の邦訳版のようです。原書は元々、『The P4 Compiler』『Compiler and Assembler Interpreter』 として別々に販売されていたようです。

書評

『Pascal-P4』が Pascal-P4 のソースコードの解説書、『翻訳系・直訳系/通訳系』が P4 コンパイラとインタプリタのソースコードとなっている。

Pascal-P4 翻訳系・直訳系/通訳系
P-Code コンパイラ 第 I 部 翻訳系 (コンパイラ)
P-Code インタプリタ 第 II 部 直訳系 (アセンブラ) / 通訳系 (インタプリタ)

先述の通り、Pascal-P4 のソースコードは公開されているので、行番号を表示できるテキストエディタがあれば、『翻訳系・直訳系/通訳系』を読む必要はない。

Pascal のソースコードを強調構文表示できるテキストエディタであればなおいい。但し、ソースコードは ハード 8 タブ で記述されているので、事前に空白に置換しておいた方がいいかと思う。もちろん DelphiLazarus で開いてもいい。
image.png
Pascal-P コンパイラのソースコードの解説なので、大前提として標準 Pascal (Revised Report) の知識が必要となる。そして、これは本書のせいではないが、Pascal-P4 の仕様のドキュメントがないため、標準 Pascal (Revised Report) との差異が断片的にしか解らない。

この書籍を手に取る前に、ある程度は Pascal 全般についての知識を身に付けておく必要があるように思える。序文に参照すべき文献として 『Pascal User Manual and Report (第 2 版)』 が挙げられているが、多分これだけでは本書を読み解けない。それでも、本書を入手したのなら『J&W 第 2 版』も併せて持っておくべきだとは思う (邦訳版は『PASCAL (ISBN10: 456300782X)』)。第 3 版以降でも代用は可能だが、年代は合わせたほうがいいように思う。

用語についてはいい意味で「混ざっている」ので、Pascal の日本語書籍の中では読みやすい部類だと思う。

なお、著者であるスティーブン・ペンバートン氏のサイトで、『Pascal Implementation: The P4 Compiler』を読む事ができる。但し、ドラフト扱いという事になっている。

個人的な評価: ★★★★☆

See also:

・Pascal-P4 と標準 Pascal の違い

  1. 手続きパラメータ / 関数パラメータがありません。
  2. goto は 手続き内 goto (Intraprocedural gotos) であり、手続き/関数の外側へジャンプする事はできません。
  3. text タイプのファイル型のみ使用でき、ファイルは P4 によって定義された input, output と、P4 がコンパイルできるように定義された 2 つの特別なファイル (prd, prr) のみが使用できます。任意の外部ファイルは扱えません。
  4. 動的変数の解放のための Dispose() の代わりに Mark()Release() を使うようになっています。
  5. 中括弧コメント {} は実装されていません。
  6. 定義済み識別子 maxint, text, round, page, dispose およびそれらを示す手続き/関数は存在しません。
  7. Reset(), Rewrite(), Pack(), Unpack() 手続きが実装されていません (これらは有効な定義済み手続きとして認識されますが、使用時には 'unimplemented' エラーが表示されます)。
  8. レコード型の可変部は識別されません。
  9. Boolean 型の値を出力 (Write() / Writeln()) できません。
  10. Real 型を固定小数点フォーマットでは出力 (Write() / Writeln()) できません。
  11. 部分範囲型を利用した集合型の定義はできません。
  12. (恐らく) 識別子はすべて小文字である必要があり、大文字/小文字を区別します。

See also:

■ Pascal-P5

標準 Pascal (ISO 7185) 準拠の Pascal-P コンパイラ/インタプリタです。SourceForge でソースコードをダウンロードできます。

この Pascal-P5 はチューリッヒ工科大学で作られたものではなく、Scott A. Moore 氏によるものです。

Pascal-P4 を標準 Pascal に準拠するようにした実装は、他にも 『Standard Pascal Model Implementation (SPMI)』 がありますが、こちらは著作権の関係で自由に配布ができないようです。

See also:

・Pascal-P5 と標準 Pascal の違い

限りなく標準 Pascal (水準 0) に近い実装となっています。制限といえば外部ファイルの扱いに制限があるくらいです。

標準 Pascal の挙動を調べるため (古い書籍にある Pascal で書かれたアルゴリズムの検証など) にとても便利です。
image.png
See also:

■ Pascal-P6

Pascal-P6 と呼ばれるコンパイラには 2 種類あります。

□ Scott A. Moore 氏による Pascal-P6

Pascal-P5 の作者である Scott A. Moore 氏によるものです。以前はソースコードのみの提供だったのですが、現在のリポジトリには Windows で動作するバイナリが含まれています。ソースコードからのビルドには gpc が必要なようです。

標準 Pascal (ISO 7185) 準拠に加え、

  • デバッグモード
  • 強化された標準チェック
  • 高速な cmach モード
  • ターゲットマシン出力ジェネレータ

など、多くの追加機能を備えています。
image.png
See also:

□ Richard Sprague 氏による Pascal-P6

ソースコードが Windows 用実行形式バイナリと共に公開されています。

標準 Pascal (ISO 7185) 水準 1 に対応している事が大きな特徴ですが、元々は作者が WD と呼ぶコンパイラを作るためのベースとして作られたもののようです。
image.png
caesar.pas をコンパイルして実行するためのコマンドラインは次のようになります。

[コンパイル]
pcom < caesar.pas caesar.p6

[実行]
pint caesar.p6

See also:

おわりに

Pascal-P について調べる時のとっかかりにでもなれば幸いです。

  1. 手続き内 goto (intraprocedural gotos) とか。

  2. 取扱説明書で言っている 標準 Pascal とは 『Revised Report』の事で、ISO 7185 / JIS X 3008 ではない。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2