PL/0 ist eine minimale, von Niklaus Wirth für die Lehre entworfene Programmiersprache, die im Buch „Algorithms + Data Structures = Programs“ (1976) als vollständiger Compilerbau-Lehrgang dient. Sie ist die klassische Blaupause für den Aufbau eines Compilers: Lexer, Parser, Codegenerator und virtuelle Maschine in wenigen hundert Zeilen Pascal.
Sprachumfang
- Konstanten, Variablen und Prozeduren
- Verschachtelte Prozeduren mit lokalen Größen
- if/while und CALL als einzige Kontrollstrukturen
- Keine Arrays, keine Strings, keine Gleitkommazahlen
Die PL/0-Maschine
Der Compiler erzeugt Code für eine einfache Stack-Maschine. Die wichtigsten Opcodes sind:
LIT n Konstante n auf den Stack
LOD l, a Variable aus Ebene l, Adresse a laden
STO l, a Variable speichern
CAL l, a Prozeduraufruf
INT n Stack um n erweitern (lokale Variablen)
JMP a unbedingter Sprung
JPC a Sprung, falls Bedingung falsch
Die Implementierung zeigt die rekursive Struktur eines Einpass-Compilers: Jede Prozedur kennt statische und dynamische Bindung über Displays oder Basisregister. PL/0 wurde später vielfach zu Übungszwecken erweitert (PL/0-Konstrukte wie CASE oder Arrays als Hausaufgaben in Compilerbau-Kursen).
Verwandte Grundlagen: Euler-Befehle, Pascal-/Delphi-Befehle, Oberon-Befehle.