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:
- There are several
FM.15 language translation projects (CS, ACS)
on offer, each consisting of picking a pair of languages to translate between:
either from other languages to Rainbow,
or from Rainbow to other languages,
or between sub-languages of Rainbow.
- There are two
FM.22 language design projects (ACS)
on offer, relating to other, as yet undefined sublanguages of Rainbow, known
as red and blue.
- There are several other related projects in the
full list of Rainbow projects.
For example,
FM.16 Design in Rainbow (CS, ACS)
and
FM.19 Timing analysis in Rainbow (ACS)
may involve extending the existing Rainbow languages.
FM.20 Extending the Rainbow design environment (CS, ACS)
lists various alternative projects, including extending the existing languages,
and improving the static analysis of Rainbow programs.
At its simplest, the latter would consist of automatically generating
documentation from Rainbow source code to describe the parallel threads,
channels, and variables used (rather like
JavaDoc
- design).
Alternatively, you could perform various advanced compile-time checks, such as
locating shared variables, or analysing tables.