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?
* More information (and examples) can be found in the Kimwitu manual.
Nowadays Kimwitu is more or less stable - no active development is undertaken, only (limited) maintenance.
There is also Kimwitu++ which claims to be "the successor of Kimwitu" -- as if C++ is the successor of C (sigh).
License: GPL and other
This project has the following developers:
New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.
Keep up with the latest Advogato features by reading the Advogato status blog.
If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!