Oberon > Compilers

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
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, front-end + back-end architecture

(1989) 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

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

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

Difference between OP2 and Paco

Paco differs from OP2 in the following aspects

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, OberonReport.ps

Oberon EBNF

html

OberonEBNF.ps

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]

From Modula Oberon (Report)

ps

ps.gz

Text

The Programming Language Oberon (Report)

ps

ps.gz

Text

Oberon EBNF

ps

ps.gz

Text

The Programming Language Oberon-2 (Report) [2]

ps

ps.gz

Text

Differences between Oberon and Oberon-2

ps

ps.gz

Text

Oberon-2 Change List

ps

ps.gz

Text

Object-Oriented Programming in Oberon-2

ps

ps.gz

Text

The Oberon Guide - System Release 1.2

ps

ps.gz

Text

Note [1]: In ETH Oberon, after opening, the text must be converted to ETH Oberon text by executing WTS.Convert Temp.FTP.Text\bs . The converted text replaces the original one.

Note [2]: The Oberon-2 report is also available at Uni Ulm, at Excelsior and in German at TU Berlin

Language Examples

Compiler Documentation and Resources

Books

Object File Format

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 ftp://ftp.ethoberon.ethz.ch/Oberon/Books/ProjectOberon/

28 Oct 2002 - Copyright © 2002 ETH Zürich. All rights reserved.
E-Mail: oberon-web at inf.ethz.ch
Homepage:
http://www.ethoberon.ethz.ch/