PL/0
   HOME

TheInfoList



OR:

PL/0 is a
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
, intended as an educational programming language, that is similar to but much simpler than Pascal, a
general-purpose programming language In computer software, a general-purpose programming language (GPL) is a programming language for building software in a wide variety of application domains. Conversely, a domain-specific programming language is used within a specific area. For exam ...
. It serves as an example of how to construct a
compiler In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
. It was originally introduced in the book, ''
Algorithms + Data Structures = Programs ''Algorithms + Data Structures = Programs'' is a 1976 book written by Niklaus Wirth covering some of the fundamental topics of computer programming, particularly that algorithms and data structures are inherently related. For example, if one has a ...
'', by
Niklaus Wirth Niklaus Emil Wirth (born 15 February 1934) is a Swiss computer scientist. He has designed several programming languages, including Pascal, and pioneered several classic topics in software engineering. In 1984, he won the Turing Award, generally ...
in 1976. It features quite limited language constructs: there are no real numbers, very few basic arithmetic operations and no control-flow constructs other than "if" and "while" blocks. While these limitations make writing real applications in this language impractical, it helps the compiler remain compact and simple.


Grammar

The following is the syntax rules of the model language defined in EBNF: program = block "." ; block = "const" ident "=" number ";" "var" ident ";" statement ; statement = "call" ident , "?" ident , "!" expression , "begin" statement "end" , "if" condition "then" statement , "while" condition "do" statement condition = "odd" expression , expression ("=", "#", "<", "<=", ">", ">=") expression ; expression = "-"term ; term = factor ; factor = ident , number , "(" expression ")"; It is rather easy for students to write a
recursive descent parser In computer science, a recursive descent parser is a kind of top-down parser built from a set of mutually recursive procedures (or a non-recursive equivalent) where each such procedure implements one of the nonterminals of the grammar. Thus t ...
for such a simple syntax. Therefore, the PL/0 compiler is still widely used in courses on compiler construction throughout the world. Due to the lack of features in the original specification, students usually spend most of their time with extending the language and their compiler. They usually start with introducing REPEAT .. UNTIL and continue with more advanced features like parameter passing to procedures or data structures like arrays, strings or floating point numbers.


Use in education

The main article on
compiler In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs tha ...
s honours PL/0 for introducing several influential concepts (stepwise refinement, recursive descent parsing, EBNF, P-code, T-diagrams) to the field by educating students to use these concepts. Over the last 3 decades, most university courses on compiler construction that used PL/0 have followed Wirth strictly in employing these techniques (see references below). Some years ago university courses deviated from the course set by Wirth with the replacement of the classical recursive descent parsing technique by a (nonetheless classical) Unix-like approach of employing
lex Lex or LEX may refer to: Arts and entertainment * ''Lex'', a daily featured column in the ''Financial Times'' Games * Lex, the mascot of the word-forming puzzle video game ''Bookworm'' * Lex, the protagonist of the word-forming puzzle video ga ...
and yacc. Only recently an implementation
PL/0 Language Tools
along this way has also combined modern concepts like object-orientation and design patterns with a modern scripting language (
Python Python may refer to: Snakes * Pythonidae, a family of nonvenomous snakes found in Africa, Asia, and Australia ** ''Python'' (genus), a genus of Pythonidae found in Africa and Asia * Python (mythology), a mythical serpent Computing * Python (pro ...
), allowing students to consume the source text of the implementation in a contemporary programming style.


Compiler construction

In December 1976, Wirth wrote a small booklet about compiler construction, containing the full source code of the PL/0 compiler. The syntax rules above were taken from this first edition of Wirth's book ''Compilerbau''.Wirth, 1986 In later editions of this book (under the influence of his ongoing research) Wirth changed the syntax of PL/0. He changed the spelling of keywords like const and procedure to uppercase. This change made PL/0 resemble Modula-2 more closely. At the same time, Wirth's friend and collaborator C. A. R. Hoare was working on his influential
communicating sequential processes In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems. It is a member of the family of mathematical theories of concurrency known as process algebras, or ...
concept, which used the exclamation mark ''!'' and the question mark ''?'' to denote communication primitives. Wirth added both symbols to the PL/0 language, but he did not mention their semantics in the book.


Examples

The following example is taken from such an extended language called PL/0E. This program outputs the squares of numbers from 1 to 10. Most courses in compiler construction today have replaced the exclamation mark with the WriteLn procedure. VAR x, squ; PROCEDURE square; BEGIN squ:= x * x END; BEGIN x := 1; WHILE x <= 10 DO BEGIN CALL square; ! squ; x := x + 1 END END. This following program prints the prime numbers from 1 to 100. The write statement corresponds to '!' statement in the EBNF syntax above. const max = 100; var arg, ret; procedure isprime; var i; begin ret := 1; i := 2; while i < arg do begin if arg / i * i = arg then begin ret := 0; i := arg end; i := i + 1 end end; procedure primes; begin arg := 2; while arg < max do begin call isprime; if ret = 1 then write arg; arg := arg + 1 end end; call primes . The following example was taken from the second edition of Wirth's book Compilerbau, which appeared in 1986 in Germany. VAR x, y, z, q, r, n, f; PROCEDURE multiply; VAR a, b; BEGIN a := x; b := y; z := 0; WHILE b > 0 DO BEGIN IF ODD b THEN z := z + a; a := 2 * a; b := b / 2 END END; PROCEDURE divide; VAR w; BEGIN r := x; q := 0; w := y; WHILE w <= r DO w := 2 * w; WHILE w > y DO BEGIN q := 2 * q; w := w / 2; IF w <= r THEN BEGIN r := r - w; q := q + 1 END END END; PROCEDURE gcd; VAR f, g; BEGIN f := x; g := y; WHILE f # g DO BEGIN IF f < g THEN g := g - f; IF g < f THEN f := f - g END; z := f END; PROCEDURE fact; BEGIN IF n > 1 THEN BEGIN f := n * f; n := n - 1; CALL fact END END; BEGIN ?x; ?y; CALL multiply; !z; ?x; ?y; CALL divide; !q; !r; ?x; ?y; CALL gcd; !z; ?n; f := 1; CALL fact; !f END.


Oberon-0

In the third and last edition of his book on compiler construction, Wirth replaced PL/0 with Oberon-0. The language Oberon-0 is much more complex than PL/0. For example, Oberon-0 offers arrays, records, type declarations and procedure parameters. The publisher of Wirth's books (Addison-Wesley) has decided to phase out all his books, but Wirth has published revised editions of his book beginning in 2004. , the most recent revision available is from May 2017.


See also

*
P-code machine In computer programming, a p-code machine (portable code machine) is a virtual machine designed to execute ''p-code'' (the assembly language or machine code of a hypothetical central processing unit (CPU)). This term is applied both generically t ...


Notes


References

* Liffick, Blaise W., Ed (1979), ''The Byte Book of Pascal'', * Wirth, Niklaus (1975)
''Algorithms + Data Structures = Programs''
* Wirth, Niklaus (1986)
''Compilerbau''
B.G. Teubner, Stuttgart


External links

*Th
compiler (.pas file)
from the first edition of the ''Compilerbau'' book, written in Pascal
Another copy of the compiler
at Pascal for small machines site *The interpreter from "Algorithms + Data Structures = Programs" book, written in Pascal *Development of
PL/0 style compiler
based on 'Compiler construction' written in Mocka (Modula-2 for Linux) *A paper explaining the use o
PL/0 at the University of Rochester
*The homepage of the PL/0 reference book, "Algorithms + Data Structures = Programs

*http://sourceforge.net/projects/pl0-compiler (written in C/C++, uses QT framework) *https://modernc.org/pl0 (written in Go, runs in terminal, cross platform) *https://github.com/dodobyte/plzero (a very small compiler produces windows executable) *https://github.com/MarcRochkind/pl0compiler (compiler for IBM 701 written in C; generates 701 assembler) {{DEFAULTSORT:Pl 0 Pascal programming language family Procedural programming languages Structured programming languages Educational programming languages Compilers Programming languages created in 1975