Skip to content
Oberon family of languages to C translator for ARM, x64 and x86 architectures
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



is a tool that translates Oberon-2 programs into semantically equivalent C programs. Full error analysis is performed on the Oberon input program and in case of no errors up to three files are generated as output.

Ofront+ does not invoke the C compiler or linkage editor. This may be done in separate shell scripts or make files and is inherently dependent on the C compiler and linkage editor being used.

Although normally not read by the user, the C code generated by Ofront+ is kept as readable as possible, nicely formatted, should not produce any C compiler error messages or warnings and is tuned for efficient execution. In fact, an Oberon program translated by Ofront+ can be expected to execute as fast and read as well as an equivalent hand-coded C program.

Ofront+ is based on Ofront by Josef Templ, but some of Component Pascal features was added (IN parameters, BITS(int) & ORD(set), arithmetic type BYTE, etc). It also contains the extra extensions, such as constant arrays (implemented by Oleg Komlev).

Ofront+ differences from Ofront/voc

  1. New experimental dialect Oberon-3 (based on Oberon-07, Component Pascal & other).

  2. Outputs a module name and position for any runtime error, HALT and ASSERT.

  3. New SYSTEM types: INT8, INT16, INT32, INT64, ADRINT.

  4. Allows arithmetic operations with the type BYTE (Oberon-3 & Component Pascal).

  5. Allows the unlimited length of constant strings (in Ofront/voc the maximum is 255 characters).

  6. Allows SYSTEM.VAL(INTEGER, {80000000H..0FFFFFFFFH}) as a constant of 32-bit type (otherwise 64-bit).

  7. ASH and SYSTEM.LSH return the INTEGER type result for INTEGER type argument, and LONGINT type result for LONGINT argument. It allows to use shifts without using 64-bit type.

  8. Support "_" in identifiers.

  9. Ofront+ for Windows works under Windows 9x. Ofront+ for Linux supports both 32 and 64 bits.

  10. Support UTF-8 encoded sources (with or without BOM) with EOL as 0DX (Oberon System), 0AX (UNIX/Linux) & 0DX+0AX (Windows).

  11. "Right FOR" (concept by Oleg Komlev), constant arrays available in Oberon-3 (yet only in Ofront+ for BlackBox).

  12. BITS(), ORD(set), LEN(string$), str1 := str2$, IN procedure parameters (in Component Pascal).

  13. ORD(bool), ORD(set) supported in Oberon-3.

  14. Arithmetic operations DIV0 and REM0 for integers, as in GPCP.

  15. SYSTEM flags: VAR [nil], ARRAY/RECORD [untagged], POINTER [untagged] as in BlackBox.

  16. Advanced features for describing bindings to foreign libraries, system flag [stdcall].

  17. It's possible to use modules written in Oberon, Oberon-2, Component Pascal & Oberon-3 together in one project.

  18. Tested with GCC/MinGW, Intel C++, SDCC and even Borland Turbo C.

Get it!

Here are two versions:

  1. Ofront+ for Windows & Linux command line

  2. Ofront+ for BlackBox Component Builder (runs as a subsystem)

You can download it at

Ofront+ now is in active development and we provide free support of the project.

To discuss and ask questions, you can subscribe to the group:

or join the forum:

Your comments and suggestions are welcome.

Ofront+ team,
You can’t perform that action at this time.