* What is Kimwitu?

Kimwitu is a system that supports the construction of programs that
use trees or terms as their main data structure. It is a `meta-tool'
in the development process of tools. Its input is an abstract description
of terms, annotated with implementation directives, plus a definition
of functions on these terms. The output consists of a number of C-files
that contain data-structure definitions for the terms, a number of
standard functions on those terms, and a translation (in C) of the function
definitions in the input (eg. term rewriting).
The standard functions can be used to create terms, compare them for
equality, read and write them on files in various formats and do
manipulations like list concatenation.

It can easily be interfaced with Yacc and Lex - the idea is that
yacc and lex are used to do the parsing, and Kimwitu routines
are used to built and manipulate the parse tree.

It can also be used to 'link' components in a toolset - the idea is
to define an abstract syntax tree (or more), that will be the interface
object, the thing that will be passed between the tools.
The various tools then read such an object from file, manipulate it
and write the result to file, to be processed by another tool.
Only one tool has to do the actual parsing, to build the tree
used by the rest of the toolset.
The tool builder does not have to worry about the file format:
from the abstract description of the interface object Kimwitu generates 
the read and write routines.

* What kind of functions can be defined?

Functions in plain C, with the extension of a 'with' statement
in which pattern matching can be expressed, and a 'foreach'
statement that loops over the elements of a list.

Rewrite rules.

Unparse rules.

* More information (and examples) can be found in the Kimwitu manual.

