Rainbow language design and translation

Background: The Rainbow language actually consists of a set of sub-languages, the most important of which are called "green" and "yellow". There are also internal languages which would normally be invisible to the user, such as "APA". Although Rainbow is intended for formal verification of asynchronous hardware designs, the languages involved are essentially ordinary programming languages, and you do not need to get involved with hardware design or formal methods unless you want to.

There are several projects on offer, most of which could be implemented using Java and JavaCC, although they could be done in other ways: