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.