PL/0

PL/0とは



PL/0(ピーエルゼロ)は、プログラミング言語の一つで、主に教育目的で使用される言語です。大きく分けて2種類のPL/0が存在しますが、ここで解説するのは、Pascalをベースに簡略化されたバージョンです。このPL/0は、コンパイラの設計・開発を学ぶための実例として活用されています。

1975年にニクラウス・ヴィルトが著書「Algorithms + Data Structures = Programs」で発表しました。PL/0は、言語の構成要素が非常に小さく、実数をサポートせず、算術演算子も必要最小限に限定されています。制御構文も「if」と「while」のみと非常にシンプルです。そのため、実用的なプログラムを作成するには不向きですが、コンパイラ自体は非常に小さく単純に作成できるという特徴があります。

PL/0の文法



PL/0の文法は、EBNF(拡張バッカス・ナウア記法)によって定義されています。この単純な文法は、再帰下降パーサを学生が実装するのに適しており、世界中の教育機関でPL/0コンパイラが広く利用されています。学生は、元のPL/0の機能が少ないため、言語やコンパイラを拡張することに時間を使えます。例えば、以下のような拡張が一般的です。

`REPEAT ... UNTIL` 構文の導入
プロシージャへの引数渡し機能の実装
配列、文字列、浮動小数点数などのデータ型の追加

コンパイラ構築



1976年12月、ヴィルトはPL/0コンパイラの全ソースコードを含むコンパイラ構築に関する書籍を出版しました。この書籍で示された構文規則は、ヴィルトの著作「Compilerbau」の初版に掲載されたものです。しかし、その後の版では、ヴィルトの研究の進展に伴い、PL/0の文法が変更されています。例えば、`const`や`procedure`などのキーワードが大文字に変更され、Modula-2に似た外観になりました。

また、ヴィルトの友人であるアントニー・ホーアが、通信プリミティブの記法として感嘆符`!`と疑問符`?`を導入し、ヴィルトもこれをPL/0に取り入れました。ただし、書籍ではこれらの記法の意味については詳しく解説されていません。

使用例



以下は、PL/0を拡張したPL/0Eという言語による例です。


VAR i,sq;
BEGIN
i := 1;
WHILE i <= 10 DO
BEGIN
sq := i i;
! sq;
i := i + 1
END
END.


このプログラムは、1から10までの数の二乗を出力します。教育現場では、感嘆符の代わりに`WriteLn`プロシージャを使用することが一般的です。


PROGRAM Squares(output);
VAR i,sq: INTEGER;
BEGIN
i := 1;
WHILE i <= 10 DO
BEGIN
sq := i i;
writeln(sq)
i := i + 1
END
END.


上記の例は、ヴィルトの著書「Compilerbau」の第2版(1986年、ドイツ)に掲載されたものです。

Oberon-0への移行



ヴィルトは、コンパイラ構築に関する書籍の第3版(最新版)で、PL/0の代わりにOberon-0を使用しています。Oberon-0はPL/0よりも機能が豊富で、配列、レコード、型宣言、プロシージャ引数などを備えています。ヴィルトの書籍の出版社は、彼の書籍を絶版としましたが、ヴィルト自身が2005年に第3版を完成させ、オンラインで公開しています。

関連事項



コンパイラ
OberonOberon-2
Pascal
再帰下降構文解析
Pコードマシン
ニクラウス・ヴィルト

参考文献



ニクラウス・ヴィルト, 「Algorithms + Data Structures = Programs」
ニクラウス・ヴィルト, 「Compilerbau」

外部リンク



Compilerbau 第一版よりPascalで書かれた コンパイラ
ロチェスター大学での PL/0 利用に関する論文
COSC230 ニュージーランド、カンタベリー大学の講義ノート。C言語、Pascal、Java で書かれたコンパイラがある。
Burry Kurtz アパラチアン州立大学の講義ノート。配列、パラメータ、関数などをPL/0に追加することを説明している。
PL/0 のリファレンス本 "Algorithms + Data Structures = Programs" のホームページ [1]
* rosettacode.orgのPL/0に実装されている多くのタスク

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。