blob: 7a0d88d77a0400c9474c7424280560a9557df903 [file] [log] [blame]
\begin{center}\Huge From Kimwitu to Kimwitu++\end{center}
This document is meant as a short guide for converting projects that employ
Kimwitu to use Kimwitu++ instead. It is probably not complete. Please mail
any comments to \url{}. % @
\item Generally Kimwitu++ works together with C++, while Kimwitu worked with C.
This will possibly cause some of the usual C to C++ hassle.
\item Kernighan \& Ritchie style for C functions is not allowed in *.k files.
Use proper ISO~C instead.
\item There is no longer a predefined phylum called `\programtext{int}'. There
is, however, a phylum providing the same functionality called
`\programtext{integer}'. When converting, please note that `\programtext{integer
i; i=5;}' will be caught by the compiler, while `\programtext{i=0;}' will not.
This is nasty, I'm sorry.
The right way to use them is `\programtext{integer i; i=mkinteger(5);} and
`\programtext{if (i->value==5) \dots}'.
\item Similar things apply to `\programtext{float}' et.\,al., there is now a
phylum `\programtext{real}'.
\item \programtext{Bool}, \programtext{True} and \programtext{False} disappeared and are
supplanted by their respective C++ counterparts.
\item Phyla are classes or objects, respectively. Instead of
`\programtext{unparse\_completeSyntaxTree( synTree, printer, view );}' you can
use the more natural `\programtext{synTree->unparse( printer, view );}'.
\item The keyword and typename `\programtext{\%view}' and `\programtext{view}'
are no longer available (they were deprecated anyway). Use
`\programtext{\%uview}' and `\programtext{uview}'.
\item Printers are now by default not functions taking \programtext{(char*,
uview)}, but rather objects of a class with \programtext{operator()(const char*,
uview)} defined. This allows a printer to have its own state. You can also still
use functions if you want, they will be wrapped when calling
\item Everthing is in the namespace \programtext{kc}. If you put
\programtext{using namespace kc;} in your program, everthing else will continue
to work as it did.
\item If you want to interface with flex and bison, not that the union
\programtext{YYSTYPE} is not generated automatically anymore. Instead, use the
command line option --yystype, which will create a seperate yystype.h containing
the type definition.
\item CSGIO works a little different in two respects.\begin{itemize}
\item The old functions returned a string which indicated success or failure.
The new functions instead return \programtext{void}. Errors will be reported
by throwing exceptions of type \programtext{IO\_exception}; there is a
function \programtext{IO\_exception2char} turning that into a string.
\item While \programtext{CSGIOwrite} is a member function,
\programtext{CSGIOread} cannot be. The latter takes just the phylum type, not
a pointer to it---just write \programtext{CSGIOread(f, p)}.
\begin{center}\large New Features\end{center}
This is just a very brief list of some of the nicest new features, it is not
\item Everything can be unparsed. As long as the (somewhat limited) parser can
read it, it will be handed to a global unparse function (in namespace kc); define
your own function if it is needed.
\item All patterns (eg. for unparse rules) can have a guard condition; the
condition comes in parentheses after the pattern following the new keyword
\item New functions for phylum types can be defined, just write something like
\programtext{void foo::bar() \{ \dots~\}}.
\item There is a new (additional) syntax for defining attributes of phyla such as
\programtext{\%member int foo::baz}; when using \programtext{\%attr} instead, the
attribute will be written out and read in with CSGIO functions.
\item Likewise you can define additional constructors and destructors with
\programtext{\%ctor} and \programtext{\%dtor}.