PL/0
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/02/18 00:54 UTC 版)
本項で詳述するもう一方のPL/0は、教育目的でPascalを簡略化したバージョンのプログラミング言語である。主にコンパイラの設計開発の実例として使用される。1975年、ニクラウス・ヴィルトの著書 Algorithms + Data Structures = Programs で紹介されたのが最初である。言語の構成要素は非常に小さく、実数はサポートしておらず、算術演算子も必要最小限で、"if" と "while" 以外の制御構文を持たない。そのような様々な制限があるため、この言語で実用的プログラムを書くのは現実的ではないが、コンパイラ自体は非常に小さく単純に作成可能である。
文法
以下はEBNFで定義されたこの言語の構文規則である。
program = block "." .
block = [ "const" ident "=" number {"," ident "=" number} ";"]
[ "var" ident {"," ident} ";"]
{ "procedure" ident ";" block ";" } statement .
statement = [ ident ":=" expression | "call" ident |
"begin" statement {";" statement } "end" |
"if" condition "then" statement |
"while" condition "do" statement ].
condition = "odd" expression |
expression ("="|"#"|"<"|"<="|">"|">=") expression .
expression = [ "+"|"-"] term { ("+"|"-") term}.
term = factor {("*"|"/") factor}.
factor = ident | number | "(" expression ")".
このような単純な文法に対して再帰下降パーサを書く方が学生にとっては易しい。従って、PL/0 コンパイラは世界中の教育機関で広く使われている。本来の仕様に機能が少ないため、学生は言語とコンパイラの拡張に時間をかけることになる。例えば、REPEAT .. UNTIL を導入したり、プロシージャへの引数渡しを実装したり、配列・文字列・浮動小数点数といったデータ型を追加したりといった拡張である。
コンパイラ構築
1976年12月、ヴィルトはコンパイラ構築に関する小さな本を出版したが、その中に PL/0 コンパイラの全ソースコードが含まれていた。前述の構文規則はそのヴィルトの本 Compilerbau の初版にあったものである[1]。同書の後の版ではヴィルトの研究の進展の影響も受けて、PL/0 の文法は変更されている。例えば、const や procedure といったキーワードは大文字に変更された。この変更で PL/0 は Modula-2 に見た目が似ることとなった。同時にヴィルトの友人アントニー・ホーアはCommunicating Sequential Processesの中で感嘆符 ! と疑問符 ? を通信プリミティブの記法として採用した。ヴィルトはこれらを PL/0 に導入したが、その意味を書籍で解説していない。
- ^ a b Wirth, Niklaus (1986), Compilerbau, B.G. Teubner, Stuttgart ISBN 3-519-32338-9
- ^ PL/0E
- ^ The (2005) of Compiler Construction, Niklaus Wirth, 1996, ISBN 0-201-40353-6 の第三版の印刷された書籍は滅多にないが、オンラインで公開されている。
- 1 PL/0とは
- 2 PL/0の概要
- 3 使用例
- 4 Oberon-0
固有名詞の分類
- PL/0のページへのリンク