Stefan Frenz

 
  Home /  Kempten University /  Ulm University /  Impressum  
 
SJC Compiler
PicOS
Native

ATmega Projects
ATmega Demo

Publications
Mail

   

Compiler

Direct link to the latest official files: source V0189, executables V0189, manual V045 German.
The manual V042 is also available in English.

Direct link to the nightly snapshot executables (caution - this may be a non-working development version) and the corresponding nightly snapshot sources. You can also look at the git-timestamps and the build log of the current nightly snapshot.

Versions after V0175 do no longer support the MARKER-specials. The corresponding functionallity is moved to a SJC-Annotation-special. If you need the old MARKERs, please use V0175.

Versions beginning with V0177 support interface arrays, please adopt your runtime environment.



I wrote a small compiler that translates some kind of java-subset into native code, either to run in an ia32 compliant protected mode or an amd64 compliant long mode. Furthermore you can produce code for a virtual machine with an unlimited amount of registers allowing almost write-once semantics for the used registers. Patrick Schmidt worked on an emulator for this machine, and also he helped to set up the backend for Atmel ATmega microcontrollers, thank you very much! Since version 180 there also exists a backend for ARM7 processors like LPC2103.

The compiler requires Sun-Java to be compiled, after boot-strapping the compiler is able to compile itself. There are only few special things (namely the pseudo-classes MAGIC and STRUCT) that enable system programming in a typesafe language. The compiler is used to compile PicOS, Rainbow OS, parts of Wissenheim, the code for the ATmega demo board and a few private projects.

The design is straight forward and extensible. You are welcome to write a new frontend (perhaps some Pascal style?) or a new backend (perhaps for another ARM processor?). For sure there are several bugs in this piece of software. If you need help doing something with my compiler or if you found a bug, please do not hesitate to contact me.

There is a set of slides containing a short overview used at an invited speech on March 17th 2008.

There is another set of slides containing a short overview used at an invited speech on October 5th 2010.

The compiler is released under the GNU Public License, you can get the source code here. Please note that the copyright still belongs to me (Stefan Frenz) and, for the emulator and the basic ATmega backend, also to Patrick Schmidt, who is mentioned in the header of the regarding class files.

If you like to edit the source code with the same Eclipse code style, you can download it here.

All executable versions contain a small runtime environment and a README.TXT to get started.



There is a version 169 since 2009/02/21 with several bugfixes and extensions. This is also the first officially released version under GPL. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 169 there is a short manual in version 29 since 2009/02/21 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 170 since 2009/04/27 with several bugfixes and extensions. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 170 there is a short manual in version 30 since 2009/04/27 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 171 since 2009/05/16 with basic flow control and some bugfixes. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 171 there is a short manual in version 31 since 2009/05/16 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 172 since 2009/08/09 with more flow analysis and some bugfixes. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 172 there is a short manual in version 32 since 2009/08/09 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 173 since 2009/10/17 with support for automatic relation analysis and some bugfixes. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 173 there is a short manual in version 33 since 2009/10/17 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 174 since 2009/11/09 with support for line number debugging hints, better flow analysis, some bugfixes and a new tool called GetMthd for easy offline-debugging. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 174 there is a short manual in version 34 since 2009/11/09 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 175 since 2010/04/01 with support empty arrays, pre-initialized objects and some bugfixes. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 175 there is a short manual in version 35 since 2010/04/01 describing the compiler's specials and some small examples. The manual is available only in German at the moment.



Versions after V0175 do no longer support the MARKER-specials. The corresponding functionallity is moved to a SJC-Annotation-special. If you need the old MARKERs, please use V0175.

There is a version 176 since 2010/04/02 with SJC-Annotations instead of the MARKER-special class. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

There is a version 176a since 2010/04/09 with a major bugfix regarding instance variable initialization. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 176 and 176a there is a short manual in version 36 since 2010/04/02 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 177 since 2010/04/29 with support for interface arrays and the syntax of enhanced for loops. Now there is support for flash arrays (required for ATmega programming) and an option maker GUI. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 177 there is a short manual in version 37 since 2010/04/29 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 178 since 2010/05/18 with lots of internal optimizations and several bugfixes. There is a new graphical option maker application in the ui-package named SCG in the Java-version. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 178 there is a short manual in version 38 since 2010/05/18 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 179 since 2010/09/30 with lots of internal optimizations and several bugfixes. Especially the char-type is now unsigned and therefore compatible to SunJava. Now implicit base type conversions are inserted in a SunJava compatible way even for method calls. Of course you still can disable this feature globally or for individually selected units or methods. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 179 there is a short manual in version 39 since 2010/09/30 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 180 since 2010/12/10 with some internal optimizations and a first working implementation of a backend for ARM7 processors. You can also download native executables for Windows and Linux (both 32 bit), these versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 180 there is a short manual in version 40 since 2010/12/10 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 181 since 2011/02/26 with some internal optimizations, a few new options and several bugfixes. All classes are moved to a container package sjc to ease compiler integration into larger systems. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 181 there is a short manual in version 41 since 2011/02/26 describing the compiler's specials and some small examples. The manual is available only in German at the moment.

There is a version 182 since 2011/06/08 with some internal optimizations, a few new options and several bugfixes. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 182 there is a short manual in version 42 since 2011/06/08 describing the compiler's specials and some small examples.
Thanks to the translation of Jonathan Brase for version 182 there is an English version of this version since 2011/08/24 describing the compiler's specials and some small examples.

There is a version 183 since 2012/03/05 with some internal optimizations, a few new options and several bugfixes. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 183 there is a short manual in version 43 since 2012/03/05 describing the compiler's specials and some small examples. If you need an English version of the manual, please use V042e.

There is a version 184 since 2013/03/16 with some bugfixes and the new debug writer "java" ("-D java ...") to generate Java source code from the parse tree (which should be "similar" to the input). You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

There is no new manual for this compiler version, please use V043 (German) or V042e (English).

There is a version 185 since 2014/03/14 with some bugfixes and the new debug writer "dwrf" ("-D dwrf ...") to generate DWARF debug infos. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

There is no new manual for this compiler version, please use V043 (German) or V042e (English).

There is a version 186 since 2015/09/28 with a new backend with support for MyCPU and a few bugfixes. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 186 there is a short manual in version 44 since 2015/09/28 describing the compiler's specials and some small examples. If you need an English version of the manual, please use the not really outdated V042e.

There is a BUGGY version 187 since 2015/10/19 with several bugfixes in the ATmega backend. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

There is a BUGGY version 188 since 2016/02/16 with a new option to generate assembler text output (currently available only for ia32 architecture). You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

For version 188 there is a short manual in version 45 since 2016/02/16 describing the compiler's specials and some small examples. If you need an English version of the manual, please use the not really outdated V042e.

There is a version 189 since 2016/03/28 with a bugfix on STRUCT-addressing introduced with version 187. You can also download a precompiled JVM-package and native executables for Windows and Linux (both 32 bit). The native versions do not require any other java compiler or runtime environment to be installed (example program is attached, too).

There is no new manual for this compiler version, please use V045 (German) or V042e (English).