Data types for attribute grammars.

The semantics package defines the Analyser class that can be considered the main class of Mork. An Analyser reads a streams into objects which includes scanning, parsing and attribution.

TODO
o global attribute optimization
  o 'global' variable for attribute that occur at most once.

o support different threads for scanning, parsing and attribution?
  Attribution might run when scanning blocks on slow input.

o how to get the size of the parsed file
  o would be useful to add statistics to Java examples
  o do I need an explicit EOF?
  o special Variable of the start symbol?
  o position variable for arbitrary symbols?

o optimize computation of scanner attributes
  o compute position in error situations only

o optimizations
  o "parse into abstract syntax"
  o compute attributes as early as possible -- and free memory

o improved semantic errors support
  o recovery
    o compute as may attributes as possible
  o declare exception
    o the user should have to declare checked exception thrown by
      functions
  o declare a replace object (or replace function) instead of throwing
    an exception
  o re-declare unchecked -> checked exception translation,
    e.g. IllegalArgumentException -> xyz

o ordered attribute grammars
  o sufficiently powerfull
  o tests cyclic dependencies at compile-time
  o semantics currently implements a kind of AG buffer that can be modified.
    An OAG would be a reasonable, efficient and powerfull finalization.
  o caveats
    o semantic error recovery:
      o record failed attributes, i.e. attributes whose computation
        failed
      o skip calls, that need failed attribute as arguments
    o second-level AG functions: use a second OAG

o optimization
  o position computation for semantic errors
  o remove local copy rules (as generated by the translation section)

o warn about unused attributes