Allgemein:
==========

LineNumber:
===========

Hinzugefgt zu den Klassen:

- Method
- DeclId

Methode "getTypeLineNumber()" zu allen TypeReplacementListenern hinzugefgt.

NichtterminalRegeln:

- methoddeclarator
- variabledeclaratorid


TyploseVariable vs. Generics:
=============================

Bisher wird kein Unterschied zwischen generischen Typvariablen (bsp.: "class<A>") und typlosen Variablen
(bsp.: "public void(para1)") gemacht. Fr beide Flle wird eine Instanz der Klasse "TyploseVariable" angelegt.

Dies wird gendert: Es gibt ab jetzt eine Unterklasse von "Type" namens "GenericTypeVar".

TyploseVariable:
================
Eine Typlose Variable kann ab jetzt nicht mehr direkt erzeugt werden. Der Konstruktor ist nun private!
Um eine neue TyploseVariable zu erhalten, muss die statische Methode TyploseVariable.fresh() aufgerufen werden.
Ansonsten kann ber die statische Methode  TyploseVariable.getInstance(String) eine bestimmte TyploseVariable
geholt werden.

Zum abstrakten Syntaxbaum:
==========================

Der Typrekonstruktionsalgorithmus manipuliert den Syntaxbaum nicht. Es wird nur lesend auf den Syntaxbaum
zugegriffen, ansonsten ist der Algorithmus losgelst vom Syntaxbaum.
Die einzige Aufgabe des Algorithmus ist, die korrekten Typangaben herauszufinden. Erst nach erfolgreicher
Ausfhrung des Algorithmus, werden die Typen ersetzt. Dies geschieht ber die TypeReplacementListener, die
die einzige Verbindung zwischen der Algorithmusdatenstruktur (TypeAssumptions und Substitutions) und der
Datenstruktur des abstrakten Syntaxbaumes darstellt.

So kann die Algorithmusdatenstruktur munter geklont werden, solange nur immer die TyploseVariable-Referenzen
korrekt, d.h. in diesem Falle flach, kopiert werden. So zeigen am Ende alle Typannahmemglichkeiten auf dieselben
Elemente des Syntaxbaumes, aber nur die vom User ausgewhlte Lsung manipuliert den Syntaxbaum.

ITypeReplacementListener:
=========================

InstVarDecl
LocalVarDecl
FormalParameter
Method

eventuell noch:

CastExpr - Nicht! hier kommt nie ne TyploseVariable rein!
ExprStmt
NewArray - Nein!


Zur Substitution:
=================

Die Klasse CSubstitution kapselt zwei Typreferenzen, wobei eine davon eine Typlose Variable ist.
Um whrend des Typrekonstruktionalgorithmus eine Substitution auf die Menge der Typannahmen auszufhren,
steht die Methode CTypeAssumptionSet.sub() zur Verfgung, die dem Algorithmus sub() aus Martins Paper
entspricht.

Um jedoch die letztendliche Substitution auf dem abstrakten Syntaxbaum durchzufhren, muss die Methode
CSubstitution.execute() aufgerufen werden. Dies sollte erst ber die GUI der IDE ausgelst werden und
nicht Teil des TypRekonstruktionsalgorithmus sein.

Zusammenfassung:
================

Substitutionen bzw. die Anwendung von Unifiern findet also letztendlich auf 3 Ebenen statt bzw. arbeitet
auf 3 unterschiedlichen Datenstrukturen:

	1. Auf den Mengen von Typannahmen ber die Methode "sub()"
	2. Auf den Mengen von bereits ermittelten Substitutionen ber die Methode "applyUnifier()"
	3. Ganz am Ende auf dem abstrakten Syntaxbaum ber die Methode "execute()"


Was ich getan habe:
===================

- Projekt neu strukturiert
- MyCompiler neu strukturiert
- TypeAssumption-Datenstrukturen erstellt
- TypeReplacementListener implementiert
- TyploseVariable modifiziert
- GenericTypeVar eingefhrt
- Compiler-Schnittstelle definiert
- TRProg implementiert
- TRStart implementiert
- TRNextMethod implementiert
- CSupportData erstellt
- Jay-File angepasst:
	- TyploseVariable eingefhrt
	- GenericTypeVar eingefhrt
	- Diverse Fehler beseitigt:
		- Void
		- TyploseVariable.setName()
- Klassen BoolLiteral, CharLiteral und IntLiteral gendert ==> BaseTypes eingefhrt

Was Martin gemacht hat:
=======================

- Unify-Algorithmus angepasst
- Unify statisch gemacht und Klasse Unify erstellt


Ungelste Probleme:
===================

- Unterscheidung von RefTypes und GenericTypeVars beim Parsen bzw. whrend des Typrekonstruktionsalgorithmus
- Umwandlung von GenericTypeVars nach Durchlaufen des Algorithmus ==> Kopplung mehrerer parametrisierter Klassen
- Anpassung des Algorithmus auf dem Papier der Art, dass alle Substitutionen nach oben mitgegeben werden ==> siehe Implementierung
- Untersttzung von BaseTypes
- Einfhrung eines echten IntersectionTypes
- Shift-Reduce-Konflikte im Jay-File

Was (noch) nicht untersttzt wird:
==================================

- Arrays
- Mehrere Klassen
