
                      A Compiler for the Join Calculus
     __________________________________________________________________

  Description

   The Core Join Calculus is an experimental programming language
   described in
    1. C. Fournet, G. Gonthier. The reflexive CHAM and the join-calculus.
       In POPL'96.
    2. C. Fournet, G. Gonthier, J-J. Levy, L. Maranget, D. Remy. A
       Calculus of Mobile Agents. In CONCUR'96.

   cjcc is an experimental compiler of the core join calculus into C. Feel
   free to download it, play with it, and change it as you like. I wrote
   this code in 1996, and it was one of the first C programs I ever wrote,
   and also the first compiler. Please forgive its awkwardness.

  Obtaining cjcc

   You can download the source code from here. The current version is
   v0.5.3.

  Usage

   Try out the sample join calculus files: gcd.j and numbers.j. Both these
   programs perform arithmetic calculations on natural numbers read from
   standard input. Sorry for the poor documentation.

   To compile a join calculus file, first use cjcc to generate C code,
   then use a C-compiler to get an executable file. (Or use the batch file
   j). For example, to compile and run the file numbers.j, type

                cjcc -o numbers.c numbers.j
                gcc -o numbers numbers.c
                numbers

  Syntax

   Here is a brief summary of the syntax that cjcc uses for the join
   calculus:

Values v ::= x | 123 | "abc" | true | false | _

Processes P ::= x<v1,...,vn>
                {}
                {P}
                P | P
                def D in P
                def /* name */ D in P

Definitions D ::= J --> P
                  D and D

Join Patterns J ::= x<y1,...,yn>
                    J | J         (all yi distinct names)

System calls: write <value,continuation,exception>
              readint <int_result,exc>
              equal <int1,int2,boole_result,exc> similarly less
              plus <int1,int2,int_result,exc>    similarly minus,times,div
              if <boole,then_cont,else_cont,exc>

  Changes

v0.5.3 2024/07/08: fixed compiler errors and warnings

v0.5.2 2004/11/24: fixed expected number of shift/reduce conflicts

v0.5.1 2004/11/22: minor fixes for compatibility with recent versions
of bison

v0.5 1997/09/04: minor update. A bug reported by Luca Padovani, which
affected only the "DEBUG" mode, has been fixed.

v0.4 1996/10/01: first public release.

  License

   Copyright (C) 1996, 1997, 2004 Peter Selinger

   This program is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
   Free Software Foundation; either version 1, or (at your option) any
   later version.

   This program is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public License along
   with this program; if not, write to the Free Software Foundation, Inc.,
   59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.

   _______________________________________________________________________


    Peter Selinger / Department of Mathematics and Statistics / Dalhousie
    University
    selinger@mathstat.dal.ca / PGP key
