Lexer
----------------------------------------------------

 * Handle escaped \:\) in semantic actions

CSA
----------------------------------------------------

 * in Java we can only have one out Attribute, so be sure
   to check this when parsing!

TILING
----------------------------------------------------

 * Leaf nodes should not call label() but rather assign costs
   right away since no patterns have been recorded for them
   anyway.

ERROR HANDLING
----------------------------------------------------

 * Provide hooks to register custom error handling functions
   in case of errors when 'tiling' or 'evaluating' the IR.
   Currently this is hard coded.

CODE GENERATION
----------------------------------------------------

 * Provide more cues as comments in the generated code
   in order to aid the user while pin pointing bugs in
   semantic actions to actually generated code.

Grammar
----------------------------------------------------

 * How should we indicate start productions? There
   are several possibilities:

    - Do it as in Coco/R where the identifier used after
      the "COMPILER" keyword is re-used in the productions
      to indicate the start symbol

    - Do it as the CUP Parser Generator for Java 
      (see http://www.cs.princeton.edu/~appel/modern/java/CUP/)
      does it:
      'start with program;'

    -> Status Quo: the first production is used as the start symbol.
        PROS: No new keywords must be defined.
        CONS: Rule order matters for the first production.

Testing
----------------------------------------------------

 *  We should either use HUnit or Quickcheck in order to verify
    that certain invariants are met, and that the correct parse
    errors and type errors are found and reported.
