Home
Up
Intro
Contents
Chapter
1
2
3
4
5
6
7
8
9
10
Design
Assert
Timing
EBNF
Report
Pas
Last Changed: July 12th, 1997
This is a conversion from Oberon text to HTML, and from German to English. The converter software is still under development,
and some features or information may be missing in this converted version.
HTML hypertext facilities are not yet active in this document.
To exploit the interactive facilities, use Oberon System 3 and the source of this text,
available for download using binary ftp as Oberon System 3 archive.
The converter from German to English is still under development as well.
A previous version is also available for Oberon V4.
To access this and other additional material use
ftp.
For the convenience of our students, most of this information and the related material is available
in German as well.
Introduction to Oberon
The Oberon Programming Language
From: The Programming Language Oberon-2, H. Mössenböck,
N. Wirth,Institut für Computersysteme, ETH Zürich, October 1993
An extended Backus-Naur Formalism (EBNF) is used to describe the syntax of
Oberon-2: Alternatives are separated by |. Brackets [ and ] denote optionality
of the enclosed expression, and braces { and } denote its repetition (possibly
0 times). Non-terminal symbols start with an upper-case letter (e.g. Statement).
Terminal symbols either start with a lower-case letter (e.g. ident), or are
written all in upper-case letters (e.g. BEGIN), or are denoted by strings
(e.g. ":=").
The representation of (terminal) symbols in terms of characters is defined
using the ASCII set. ...Capital and lower-case letters are considered as
distinct.
ident = letter {letter | digit}.
number = integer | real.
integer = digit {digit} | digit
{hexDigit} "H".
real = digit {digit} "." {digit}
[ScaleFactor].
ScaleFactor = ("E" | "D") ["+"
| "-"] digit {digit}.
hexDigit = digit | "A" | "B" |
"C" | "D" | "E" | "F".
digit = "0" | "1" | "2" | "3"
| "4" | "5" | "6" | "7" | "8" | "9".
characterConst = digit {hexDigit} "X".
string = ' " ' {char} ' " ' | " ' " {char} " ' ".
Comments may be inserted between any two symbols in a program. They
are arbitrary character sequences opened by the bracket (* and closed by
*). Comments may be nested. They do not affect the meaning of a program.
...
Appendix B: Syntax of Oberon-2
Module = MODULE
ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] END ident ".".
ImportList = IMPORT
[ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq = {
CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl
";" | ForwardDecl ";"}.
ConstDecl =
IdentDef "=" ConstExpr.
TypeDecl =
IdentDef "=" Type.
VarDecl =
IdentList ":" Type.
ProcDecl = PROCEDURE
[Receiver] IdentDef [FormalPars] ";" DeclSeq [BEGIN StatementSeq] END ident.
ForwardDecl = PROCEDURE
"^" [Receiver] IdentDef [FormalPars].
FormalPars = "("
[FPSection {";" FPSection}] ")" [":" Qualident].
FPSection = [VAR]
ident {"," ident} ":" Type.
Receiver =
"(" [VAR] ident ":" ident ")".
Type = Qualident
|
ARRAY [ConstExpr {"," ConstExpr}] OF Type
|
RECORD ["("Qualident")"] FieldList {";" FieldList} END
|
POINTER TO Type
|
PROCEDURE [FormalPars].
FieldList = [IdentList
":" Type].
StatementSeq = Statement
{";" Statement}.
Statement = [
Designator ":=" Expr
|
Designator ["(" [ExprList] ")"]
|
IF Expr THEN StatementSeq {ELSIF Expr THEN StatementSeq} [ELSE StatementSeq]
END
|
CASE Expr OF Case {"|" Case} [ELSE StatementSeq] END
|
WHILE Expr DO StatementSeq END
|
REPEAT StatementSeq UNTIL Expr
|
FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
|
LOOP StatementSeq END
|
WITH Guard DO StatementSeq {"|" Guard DO StatementSeq} [ELSE StatementSeq]
END
|
EXIT
|
RETURN [Expr]
].
Case = [CaseLabels
{"," CaseLabels} ":" StatementSeq].
CaseLabels = ConstExpr
[".." ConstExpr].
Guard =
Qualident ":" Qualident.
ConstExpr =
Expr.
Expr = SimpleExpr
[Relation SimpleExpr].
SimpleExpr = ["+"
| "-"] Term {AddOp Term}.
Term = Factor
{MulOp Factor}.
Factor = Designator
["(" [ExprList] ")"] | number | character | string | NIL | Set | "(" Expr
")" | " ~ " Factor.
Set =
"{" [Element {"," Element}] "}".
Element = Expr
[".." Expr].
Relation = "="
| "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp = "+"
| "-" | OR.
MulOp = "
* " | "/" | DIV | MOD | "&".
Designator = Qualident
{"." ident | "[" ExprList "]" | " ^ " | "(" Qualident ")"}.
ExprList = Expr
{"," Expr}.
IdentList = IdentDef
{"," IdentDef}.
Qualident = [ident
"."] ident.
IdentDef = ident
[" * " | "-"].
Home
Up
Intro
Contents
Chapter
1
2
3
4
5
6
7
8
9
10
Design
Assert
Timing
EBNF
Report
Pas