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 Darcs. 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. If you're on Debian, then install the packages ghc6 ghc6-libsrc ghc6-prof libghc6-mtl-dev haddock.
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 Tock yourself, then please join the tock-discuss mailing list:
The code is documented inline using Haddock syntax; install Haddock and type make haddock to create HTML documentation in the doc directory.