\documentclass[a4paper,10pt]{article}
\usepackage{url,a4wide,newcent}
\usepackage[latin1]{inputenc}

\newcommand{\programtext}[1]{\texttt{\textbf{#1}}}

\begin{document}
\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{piefel@informatik.hu-berlin.de}. % @

\begin{itemize}
    \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
    \programtext{unparse}.

    \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)}.
	\end{itemize}
\end{itemize}
\clearpage
\begin{center}\large New Features\end{center}
This is just a very brief list of some of the nicest new features, it is not
exhaustive.
\begin{itemize}
    \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
    \programtext{provided}.
    \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}.
\end{itemize}
\end{document}
