Tock (translator from occam to C from Kent) is a Haskell-based compiler for occam and related languages.
- C99 using the CCSP runtime
- C++ using the C++CSP runtime
It's written in Haskell, making use of the Parsec parser combinator library and generic tree transformation passes. It aims to provide C-like performance for straightline code.
For more details on Tock, see Adam's fringe presentation from CPA2007:
The source code is currently managed using the Darcs distributed revision control system. You can browse it with a web browser here:
To download a copy of the source to play with, install Darcs, then do darcs get --partial http://offog.org/darcs/tock/; this will give you a tock directory containing the source code.
Tock itself needs GHC version 6.6 or later, Alex and DriFT. If you're on Debian, then install these packages:
ghc6 ghc6-libsrc ghc6-prof libghc6-mtl-dev libghc6-haxml-dev libghc6-hunit-dev haddock alex drift darcs
To compile Tock itself, type make.
Tock's C backend needs GCC 3 or later, and a post-2007-04-23 KRoC installation. You can say make testcases/commstime-mini to compile one of the testcases.
Working on Tock
Tock is designed to make it straightforward to experiment with modifications to the compiler -- for example, adding new backends, or testing out new language features or optimisations. If you're interested in working on (or using) Tock yourself, then please join the tock-discuss mailing list:
You can use Darcs to work on and commit ("record") changes in your own copy, and then submit them to Adam when you're happy for them to be merged using darcs send. Provided your changes don't break Tock for other users, we're interested in getting them into the trunk as soon as possible so that they're available to everybody.
The code is documented inline using Haddock syntax; install Haddock and type make haddock to create HTML documentation in the doc directory.