Most of my software that is in the public domain is available on CodePlex http://www.codeplex.com/ although there are some other versions available somewhere inside the QUT website. Where both are available, the CodePlex versions are the current ones, and are under source code control (I use TortoiseSVN by choice).
Most of the software has been released under the Gardens Point name, chosen for the particular bend in the Brisbane River where the main campus of Queensland University of Technology is situated. And yes that is the same river that flooded in January 2011, inundating about 11 thousand houses.
What Software Tools?
The software tools that I maintain on CodePlex are:
- Gardens Point LEX (gplex). This is a lexical scanner generator which produces C# as output. The tool has lots of options, and can create scanners that deal with the whole Unicode character set.
- Gardens Point Parser Generator (gppg). This is a parser generator which produces C# as output. The tool has an input language very close to traditional YACC, and produces an LALR(1) parser with the usual disambiguation rules.
- PE Reader/Writer API (perwapi). This is a reader/writer for Microsoft .NET PE files. It has been used by a number of compilers including GPCP and GPM-CLR. The tool does not deal with the complete world of the latest version of the .NET framework. I tend to do enhancements/bug-fixes on an on-demand basis.
- There is also a prototype tree rewriter-generator, based on Bottom Up Tree Rewriting theory. This is almost ready for release, and I intend to blog about its virtues and challenges quite a bit.
- Gardens Point Component Pascal (gpcp). This is the demonstration compiler that I wrote in year-2000 for the initial release of the .NET framework. It also formed the running example for my book Compiling for the .NET Common Language Runtime, Prentice-Hall 2002. There is also a JVM version of this compiler, but it lags behind the CLR version by a couple of releases.
- Gardens Point Modula-2 (CLR version). GPM was a compiler family that was built at QUT over about a ten year period. Initially a commercial product, it was available on a total of about eleven machine architecture/operating system combinations. Only a freeware Linux/x86 version appears to be still in use, and development stopped in about 1995. However, a CLR version was created in 2003, as an example of how to write a CLR compiler for a non-typesafe, non-object oriented language. GPM-CLR is effectively a new backend for the GPM frontend that all versions of GPM used in 1995. As a side-effect of this open source experiment the previously non-open-source front-end is public. I use GPM-CLR myself when I need to run some dusty old Modula-2 program.
- I am currently writing a C# version-3 backend for the QUT C# typechecker. The typechecker is a framework for research on type-system extensions to C#. It was used for Andrew Craik's excellent PhD thesis. The backend is a platform for exploring issues to do with code-generation for .NET. It is, if you wish, filling in all the bits that are missing from my Compiling for the .NET Common Language Runtime. Some were missing because they hadn't been invented in 2001, and others due to sheer ignorance on my part.
- As well as the bottom-up rewriter-generator mentioned earlier, I am interested in plain ordinary code selection again (as opposed to code generation for virtual machines such as JVM and CLR). Code for the SnapDragon is a gleam in the eye.