This document was originally hosted at the ETHZ. It remains under the ETH license and is in the WayBack archive.

Oberon Compilers and Language reference material
Compilers Overview
Name Technology Languages supported Features Front-End Authors Back-End Authors
Ceres 1-pass recursive descent parser, direct code generation Oberon N. Wirth, J. Gutknecht NS32xxx: N. Wirth
ARM: N. Wirth[1]
StrongARM: A. Signer
OberonSA 1-pass recursive descent parser, direct code generation OberonSA = Oberon subset N. Wirth OLGA: N. Wirth
NOSAP 1-pass recursive descent parser, direct code generation OberonSA extension M. Sanvido OLGA: M. Sanvido
OP2 1-pass recursive descent parser, generates intermediate parse tree Oberon, Oberon-2 Fine grained fingerprinting,[2] front-end + back-end architecture (1989) R. Crelier (1989) MIPS: R.Crelier
(1989) i386: N. Mannhart
(1989) 68000: M. Franz
(1989) SPARC: J. Templ
(1990) Amiga: S. Ludwig, C. Nieder, R Degner
(1991) Power: M. Brandis
(1991) PA-RISC: J. Supcik
(1994) PowerPC: T. Kistler, A. Wuerz - Uni Linz
(1994) OMI: M. Franz, T. Kistler
(1995) DEC/HP Alpha (64 bit):[3] Guenter Dotzel, Hartmut Goebel, Peter Pirkelbauer, Don Ward[4]
Enhanced OP2 1-pass recursive descent parser, intermediate parse tree Oberon, Oberon-2, Oberon-X, Active Oberon, Embedded Assembler Fine grained fingerprinting, front-end + back-end architecture R. Crelier, P. Reali - additions i386: P. Reali
SPARC: G. Feldmann (additions)
Paco 1-pass recursive descent, scope concurrent parser Oberon, Active Oberon, Embedded Assembler front-end + back-end architecture, dynamically pluggable code generators, concurrent P. Reali i386 for Paco: P. Reali,
StrongARM: B. Egger
Oberon.Net 1-pass recursive descent parser Active Oberon for .net J. Gutknecht, B. Smith-Mannschott, H.P. Hoegger, P. Kramer, T. Frey Back-end: MS-IL
Hyperstone Oberon 2-pass front-end+back-end compiler Oberon H.P. Hoegger Hyperstone: P. Kramer
Kernel: T. Frey, O. Joos
OP2 T800 cross compiler 1-pass recursive descent parser; generates intermediate parse tree. Oberon-2 Fine-grained fingerprinting absent. Metaprogramming absent (1989) R. Crelier (1994) Stephane Micheloud;[5]
Compiler deployment in the maintained ports - Download information
OS ETH Oberon Port Front-end Back-end B.E. maintainer
Native Native Oberon Enh. OP2 i386 Patrik Reali
Linux Linux Native Oberon (LNO) Peter Matthias
Oberon for Linux x86 Günter Feldmann
Oberon for Linux PPC PPC
Solaris Oberon for Solaris x86 i386
Oberon for Solaris SPARC SPARC
MacOs X Oberon for Mac OS X PPC
Windows PlugIn Oberon for Windows i386
Bluebottle Oberon for Bluebottle Paco i386 for Paco Patrik Reali
ARM for Paco Bernhard Egger
Enh. OP2 i386 Patrik Reali

Front-end maintainer

  • Enhanced OP2, Paco (Parallel Compiler): Patrik Reali

Difference between OP2 and Paco

Paco differs from OP2 in the following aspects

  • Paco is a completely new compiler written in Active Oberon. It relies on active objects for its execution: every scope is parsed concurrently by a parser object. This is currently not faster, but simplifies the handling of forward references.
  • Language support: no Oberon-2 support and limited support for Oberon-X (semi-dynamic arrays, user defined return types)
  • Intermediate representation: low-level assembler-like representation close to a SSA-form (infinite registers, assigned once).
  • Back-end: hot-pluggable back-ends (currently i386 and StrongARM)

Note concerning the PowerPC compiler for LinuxPPC and MacOs X

In the enhanced PowerPC compiler, introduced in release 2.3.8, the bit order of sets is compatible with the other compilers (x86, SPARC, ...) (SYSTEM.VAL(LONGINT, {0}) = 1).

The old PowerPC compiler, used in MacOberon and PowerOberon (V4) (see below), represents sets in reversed bit order ({0} = 2^31). This makes mixed integer and set operations with type coercions (which are heavily needed in encryption algorithms) unportable. It was probably one of the goals of module BIT to overcome this incompatibility. But the use of module BIT makes algorithms less readable and less efficient.

Compiler deployment in ports no longer updated - Download information
OS ETH Oberon Port Front-end Back-end
Native SharkOberon for DNARD Ceres ARM
Dos-Based Native Oberon Enh. OP2 i386
Windows Oberon for Windows Enh. OP2 i386
Windows 3.x Oberon System 3 for Windows OP2 i386 + OMI
MacOs MacOberon System 3 OP2 PPC / 68000 + OMI
MacOs 6.x to 9.x MacOberon OP2 PPC + OMI
HP-UX Oberon System 3 for HP-UX OP2 PA-RISC

Note concerning Slim Binaries, often referred to as "OMI"

OMI is now history and not implemented in the current ETH Oberon system. This very interesting technology was not integrated into the new compiler because we did change the language many times and this required some deep changes to the compiler. The OMI implementation we had (and still have) was optimized for the OP2 parse tree to the extent that changing anything in the parse tree or symbol table would break or cripple it, and it should have been de-optimized first or even rewritten for the new parse tree. Anyway, this is still possible, and it would be interesting, to have somebody take over the OMI code and adapt it to the extended symbol table and parse tree used for Active Oberon.

A number of earlier ports written in the context of the Oberon V4 project are still downloadable though not maintained since:

Oberon Language Reports and related Documents
Documents written or revised for ETH Oberon Web Included in the distribution
The Programming Language Oberon (Report) html OberonReport.html,
Oberon EBNF html
The module SYSTEM html No
Active Oberon Language extension html No
Active Oberon Language Report html No
Active Oberon for .net White Paper MS Word doc No
Oberon-X extension html No
Oberon Kurs, by Günther Sawitzki html No
Introduction to Oberon, by Günther Sawitzki html No
Documents written for Oberon V4 Postscript gnu-comp V4 text [1] TeX HTML
From Modula Oberon (Report) ps ps.gz Text
The Programming Language Oberon (Report) ps ps.gz Text here
Oberon EBNF ps ps.gz Text
The Programming Language Oberon-2 (Report) ps ps.gz Text Excelsior UCSD
Differences between Oberon and Oberon-2 ps ps.gz Text
Oberon-2 Change List ps ps.gz Text here
Object-Oriented Programming in Oberon-2 ps ps.gz Text
The Oberon Guide - System Release 1.2 ps ps.gz Text

Note [1]: An Oberon Text file can not be displayed by a conventional browser. In V4 it is displayed with an editor. In ETH Oberon, after opening, the text must be converted to ETH Oberon text by executing WTS.Convert Temp.FTP.Text. The converted text replaces the original one.

Language Examples
Compiler Documentation and Resources
Object File Format
  • Native 2.3.6 and earlier [ html | pdf ]
  • Native alpha and beta versions, 2.3.7 Unix Versions [ html | pdf ]
  • Aos/Bluebottle Releases Nov. 17, 06 and later [ html | pdf ]
Intel documentation
How to write a back-end for a new architecture

In our experience, it is relatively easy to write a simple Wirth-like compiler for a new architecture. For example, A. Signer, at that time a student, wrote the compiler back-end for the StrongARM and ported the ETH Oberon system in four months.

The advantage of a Wirth compiler is that it is based on a few fixed code patterns that are generated directly, without first building an internal representation of the program. This simplifies the design significantly.

Paul Reed changed the code pattern procedures to upcalls, which allows him to plug in different code generators.

Of course, it is easier to implement optimizations in a compiler that supports an internal intermediate form, like OP2, but the added complexity only pays off if you actually have time to study and implement the optimization algorithms.

The canonical version is at [expired]

28 Oct 2002 - Copyright © 2002 ETH Zürich. All rights reserved.
E-Mail: oberon at

References edit