Sprachdefinition von Oberon-2

Die Syntax von Oberon-2 wird hier in der erweiterten Backus-Naur-Form (EBNF) wiedergegeben. Dabei werden Alternativen durch | getrennt, eckige Klammern schließen optionale Ausdrücke ein und geschweifte Klammern erlauben null-, ein- oder mehrfache Wiederholungen des eingeschlossenen Ausdrucks.

Begriffe und Schreibweisen

Symbole  sind Namen, Zahlen, Zeichenketten, Operatoren, Begrenzer und Schlüsselwörter. Sie setzen sich aus Zeichen aus dem ASCII-Zeichensatz zusammen. Dabei müssen folgende Regeln beachtet werden:

Einige Namen sind bereits vordefiniert. Häufig tauchen auch noch Zeichenkonstanten und Kommentare auf.

Deklarationen und Sichtbarkeit

Jeder in einem Programm vorkommende und nicht vordefinierte Name muß durch eine Deklaration eingeführt werden. Bei der Deklaration werden auch noch weitere Eigenschaften dieses Objekts festgelegt. Für das Programm ist ein Objekt ab seiner Deklaration und bis zum Ende des Blocks, in dem die Deklarartion erfolgt ist, sichtbar.

Regeln:

Ein innerhalb eines Moduls deklarierter Name kann durch eine zusätzliche Exportmarke ("*" oder "-") als exportiert gekennzeichnet werden. Ein aus einem Modul M exportierter Name x kann in anderen Modulen verwendet werden, wenn diese das Modul M importieren. Der Name wird dann dort durch M.x und wird 'qualifizierter Name' (qualified identifier) genannt. Namen, die durch "-" gekennzeichnet wurden, können im importierenden Modul nur im lesenden Zugriff verwendet werden.

Konstantendeklarationen

Eine Konstantendeklaration verbindet einen Namen mit einem konstanten Wert.
Beispiele:

n = 100;
limit = 2*n-1;

Typdeklarationen

Der Datentyp bestimmt den Wertebereich einer Variablen und die anwendbaren Operatoren. Eine Typdeklaration verbindet einen Namen mit einem Datentyp.

Beispiele:

Table = ARRAY n OF REAL;
Tree = POINTER TO Node:
Node = RECORD
          key: INTEGER;
          left, right: Tree;
END;

Elementare Datentypen

Datentyp Wertebereich
BOOLEAN die Wahrheitswerte TRUE und FALSE
CHAR die Zeichen des erweiterten ASCII-Codes (0X...0FFX)
SHORTINT die ganzen Zahlen zwischen MIN(SHORTINT) und MAX(SHORTINT)
INTEGER die ganzen Zahlen zwischen MIN(INTEGER) und MAX(INTEGER)
LONGINT die ganzen Zahlen zwischen MIN(LONGINT) und MAX(LONGINT)
REAL reelle Zahlen zwischen MIN(REAL) und MAX(REAL)
LONGREAL reelle Zahlen zwischen MIN(LONGREAL) und MAX(LONGREAL)
SET Mengen von ganzen Zahlen im Bereich von 0 bis MAX(SET)