JavaCompilerCore/notizen/bajo1/Theoretische_Erkenntnisse.txt

46 lines
2.1 KiB
Plaintext
Raw Normal View History

2014-02-04 16:44:03 +00:00
TRProg:
=======
In TRProg werden zun<75>chst die unterschiedlichen Mengen von Typannahmen zusammengebaut.
V_fields_methods:
Die Typannahmen aller Membervariablen und aller Methoden (Parametertypen und R<>ckgabetyp)
V_1 bis V_n:
Die Typannahmen aller Parameter einer Methode V_i als Typannahmen f<>r lokale Variablen.
Danach wird TRStart gerufen, dessen R<>ckgabewert eine Menge von 2-Tupeln aus Unifiern und
Mengen von Typannahmen ist. Diese Tupel m<>ssen eventuell noch <20>ber einen Intersection-Typ
strukturiert werden, bilden aber prinzipiell das Ergebnis des Typrekonstruktionsalgorithmus:
Alle m<>glichen Typkombinationen f<>r diese Klasse in Form von unterschiedlichen Typannahmemengen.
TRStart:
========
TRStart bekommt als Argumente n TypeAssumptionSets V_n f<>r jede der n Methoden eine.
F<EFBFBD>r jede der n Methoden wird TRNext aufgerufen, der m Triples (sigma_j, ty_j, V_j) zur<75>ck gibt.
D.h. m m<>gliche Typkombinationen f<>r diese eine Methode.
F<EFBFBD>r jede der m M<>glichkeiten wird daraufhin eine Menge von m<>glichen Unifier f<>r den ReturnType berechnet.
Dann wird auf jedes V_j der m M<>glichkeiten alle zugeh<65>rigen Unifier unify element unify_j angewendet
und eine Menge von Tupeln (sigma_z, V_z) gebildet. Diese Mengen von Tupeln aller V_j werden zu einer
Ergebnismenge vereinigt.
Dieser ganze Ablauf passiert f<>r jede der m Methode n Mal, wobei die Erkenntnisse der vorher gehenden
Durchl<EFBFBD>ufe immer als Eingabewert f<>r den n<>chste Durchlauf dienen.
Nach dem letzten Durchlauf wird die Ergebnismenge von Tupeln (sigma, V) von TRStart zur<75>ckgegeben.
TRNext:
=======
TRNext hat im Prinzip die Aufgabe, die bisherigen Teilergebnisse in Form von Typannahmen um weitere
Informationen aus der aktuellen Methode zu erweitern.
Dabei werden f<>r alle n V_i der <20>bergebenen Tupel (sigma, V) TRStatement des Blocks der aktuellen Methode
aufgerufen. Zuvor werden aus dem jeweiligen V_i noch die Typannahmen f<>r die Parameter der letzten Methode
(als lokale Variable) entfernt und um die Typannahmen der neuen Parameter (als lokale Variablen) erweitert.
Dabei werden die bisher ermittelten Unifier ber<65>cksichtigt, d.h. entsprechende Substitutionen gleich durchgef<65>hrt.