NOCC is an experimental compiler framework for CSP-based concurrent languages, as well as others, generating code for a variety of targets (real and abstract). NOCC itself aims to provide a generic compiler framework, of sorts, with particular source languages and output targets added on as needed. Languages are generally compiled for a single (fixed) target, though there is scope for flexibility.
NOTE: the compiler is undergoing some structural work to change it from 32-bit to 64-bit. The code as it was on 08/07/2016 is in the "32bit" branch. So for a while, it'll probably not work right.
Currently implemented to a fairly reasonable extent:
- AVR assembler (for 8-bit Atmel AVRs), generating flash and eeprom images.
Somewhat under construction, but functional in some ways:
- Guppy parallel programming language, targeting the CCSP run-time scheduler via CIF.
- occam-pi parallel programming language, targeting ETC / KRoC.
- MCSP expression language, targeting ETC / KRoC.
And some extra things that I've poked around with, but haven't gotten very far on:
- escape analysis language, and interactive processing / exploration of these.
- haskell front-end (hopp) parser, to digest parse-trees generated by another compiler.
- RCX BASIC, a simple programming language for the LEGO Mindstorms RCX (intended to code-gen to RCX bytecode).
- tree-rewriting language, an abstract way of specifying parse-tree transformations within nocc.