This is the CDL3 system. The directories contain the following stuff:
 - include: include files for the CDL3 compiler (*.k3), include files
   for the generated C code (*.h) which can also be used by external
   routines.
 - rts: this contains the runtime system against which a generated
   program should be linked.
 - src: the CDL3 compiler source files reside in here. It is quite a
   mess, but this will be cleaned up.
 - stage0: generated C sources of the CDL3 files of the compiler. It is
   used for bootstrapping.
 - stage1: symlinks to the CDL3 sources in the src dir. The stage0
   compiler is used to compile these sources. This directory will
   contain the actual compiler.
 - docs: documentation and some examples. This documentation is used as
   course documentation for the Compiler Construction course at the
   Computer Science Institute at the University of Nijmegen (KUN).

Usage:
After installing the compiler (see the INSTALL file), the CDL3 compiler
can be used to compiler .k3 files:

    /path/to/compiler/bin/cdlc -L /path/to/compiler/include/ main.k3

(NOTE: the slash after include *must* be there. When it is not there,
the compiler will mess up the path. This will be fixed). The above
command will generate a .o file for every .k3 file. Linking can be done
by:
    
    gcc -L/path/to/compiler/lib -o main main.o submodule.o -lcdlrts

Compilation of seperate files is supported as of version 1.2.

What the documentation does not describe, are undefined values. Local
variables will be initiated upon use. Global variables will not be
initiated, and will contain Undefined as their value. Upon first write
these globals will get initiated and get a value. An undefined variable
can very well be read, but doing a split will fail for all (defined)
alternatives.

Last but not least, there is a bug concerning arrays and globals: the
compiler does NOT check if a non-array global variable is indexed (as if
it were an array). Which is to be fixed in a future release.

Except for the "features" described above, the compiler and runtime
system functions in accord with the specifications as described in the
documentation.

The system has been known to compile on most major platforms:
 - Linux
 - FreeBSD
 - Solaris/SunOS
 - Windows (using the Cygwin tools)
 - IRIX and IRIX64
 - AIX (IBM rs6000 and ParsyTec machines)
 - BeOS

Questions, comments, bugs, patches and what's more, are welcome.

-- Erik Verbruggen (ejv@cs.kun.nl)
