Tock (translator from occam to C from Kent) is a Haskell-based compiler for occam and related languages.

Current frontends:

Current backends:

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:

Tock is currently experimental and under development; if you're after a stable occam-pi implementation then please see KRoC or the Transterpreter.

Getting Tock

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.

Compiling Tock

Tock itself needs GHC version 6.6 or later and Alex. If you're on Debian, then install these packages (as a minimum to compile Tock):

ghc6 ghc6-prof
libghc6-mtl-dev libghc6-hunit-dev
alex
darcs autoconf automake

To be able to compile the documentation you will also need the haddock package. To play with the XML AST, you will also need the libghc6-haxml-dev drift packages.

Once you have the sources in a directory, you will need to execute these commands:

autoreconf -i
./configure
make

You can also run the command make && ./tocktest to run the supplied unit tests.

Tock's C backend needs GCC 3 or later, and a post-2007-04-23 KRoC installation. Tock's C++ backend needs GGC 3, and C++CSP v2.0.2 or later.

Running Tock

To compile a program to a binary using Tock, use a command of the form:

/path/to/tock --output=testprog testprog.occ}} 

For more exciting output, add the {{{-v}}} flag.  The command {{{./tock --output=testcases/commstime-mini testcases/commstime-mini.occ}}} will compile one of the testcases.  By default, Tock uses the occam frontend and the C/CCSP backend.  To change this, use {{{--frontend=rain}}} and/or {{{--backend=cppcsp}}} respectively.  However, both the Rain frontend and C++CSP backend are currently unfinished.

== 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: 
  https://lists.kent.ac.uk/sympa/info/tock-discuss

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.

Tock (last edited 2008-11-20 13:17:07 by ats)