From 442da87f48e6273de7728fc8a6ac18e6e3ce7b4d Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 26 Jun 2015 12:25:46 +0200 Subject: [PATCH] =?UTF-8?q?Debug-Code=20einf=C3=BCgen=20f=C3=BCr=20Karthes?= =?UTF-8?q?isches=20Produkt=20in=20Unify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../typeinference/ConstraintsSet.java | 4 +++ .../typeinference/OderConstraint.java | 9 +++-- .../typeinference/UndConstraint.java | 7 ++++ .../typeinference/unify/Unify.java | 34 +++++++++++++------ test/unify/UnifyFilter.java | 4 +++ 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java index 032b8f56..5c8524a8 100755 --- a/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java +++ b/src/de/dhbwstuttgart/typeinference/ConstraintsSet.java @@ -36,6 +36,10 @@ public class ConstraintsSet extends UndMenge implements Iterable{ */ } - public void addConstraint(UndConstraint methodConstraint) { - oderConstraintPairs.add(methodConstraint); + public void addConstraint(UndConstraint constraint) { + oderConstraintPairs.add(constraint); } + /** + * Filtert die Constraints in diesem ODER-Verknüpften Constraint aus, + * welche keinen Sinn ergeben, also beim unifizieren scheitern. + * @param unifier - Wird für die Unifizierung benutzt + */ void filterWrongConstraints(Unifier unifier) { Menge filteredConstraints = new Menge<>(); for(UndConstraint cons : this.getUndConstraints()){ diff --git a/src/de/dhbwstuttgart/typeinference/UndConstraint.java b/src/de/dhbwstuttgart/typeinference/UndConstraint.java index a6deb253..a30e4127 100755 --- a/src/de/dhbwstuttgart/typeinference/UndConstraint.java +++ b/src/de/dhbwstuttgart/typeinference/UndConstraint.java @@ -34,6 +34,13 @@ public class UndConstraint extends UndMenge { Pair p = new Pair(type, rT); this.set.add(new EinzelElement(p)); } + + @Override + public String toString() { + String ret = this.getConstraintPairs().toString(); + return ret; + } + /* public UndConstraint(ConstraintType p1, ConstraintType p2) { diff --git a/src/de/dhbwstuttgart/typeinference/unify/Unify.java b/src/de/dhbwstuttgart/typeinference/unify/Unify.java index 8e54398a..240a127e 100755 --- a/src/de/dhbwstuttgart/typeinference/unify/Unify.java +++ b/src/de/dhbwstuttgart/typeinference/unify/Unify.java @@ -630,25 +630,30 @@ public class Unify } //Schritt 4, Teil 2: Kartesisches Produkt bilden. - /* + ///* //TODO: Vor der Bildung des Karthesischen Produkts unmögliche Kombinationen ausfiltern //cartProduktSets kontrollieren: ConstraintsSet cSet = new ConstraintsSet(); - for (Menge> vecvecpair : cartProduktSets){ + UndConstraint eq1cons = new UndConstraint(); + for(Pair p : Eq1){ + eq1cons.addConstraint(p.TA1, p.TA2); + } + cSet.add(eq1cons); + for(Menge> vecvecpair : cartProduktSets){ OderConstraint orConstraints = new OderConstraint(); for(Menge pairs : vecvecpair){ UndConstraint uCons = new UndConstraint(); for(Pair p : pairs){ - uCons.addConstraint(new ConstraintPair(p)); + uCons.addConstraint(p.TA1, p.TA2); } orConstraints.addConstraint(uCons); } - cSet.addItems(orConstraints); + cSet.add(orConstraints); } SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); - if(filter){ + if(filter && false){ Unifier filterUnify = (pairs)->{ String pairsString = pairs.toString(); Menge> retValue = new Menge<>(); @@ -656,18 +661,19 @@ public class Unify //Unify.unify(pairs, fc_tto, (i)->{}); log.debug("Filtere Constraints:\n"+pairsString); log.debug("Ergebnis: "+ retValue); - return retValue;}; + return retValue; + }; log.debug("Filtere mithilfe von 'filterWrongConstraints': "+cSet); cSet.filterWrongConstraints(filterUnify); } - Menge> bigCartProductErg = cSet.cartesianProduct(); - if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg); - */ + Menge> bigCartProductErg3 = cSet.cartesianProduct(); + if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg3); + //*/ - ///* + ///* Altes Karthesisches Produkt: Auskommentiert durch Andreas Stadelmeier //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebildet. Menge helpvp; Menge> bigCartProductErg = new Menge>(); @@ -689,6 +695,14 @@ public class Unify } //*/ + if(! bigCartProductErg.equals(bigCartProductErg3)){ + for(int i = 0; i> changedSets = new Menge>(); diff --git a/test/unify/UnifyFilter.java b/test/unify/UnifyFilter.java index 3897ca31..3c50bafe 100644 --- a/test/unify/UnifyFilter.java +++ b/test/unify/UnifyFilter.java @@ -8,6 +8,7 @@ import java.io.UnsupportedEncodingException; import org.junit.Test; +import plugindevelopment.TypeInsertTester; import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompilerAPI; import de.dhbwstuttgart.logger.Logger; @@ -17,6 +18,8 @@ import de.dhbwstuttgart.parser.JavaParser.yyException; import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; public class UnifyFilter { public final static String rootDirectory = System.getProperty("user.dir")+"/test/unify/"; @@ -32,6 +35,7 @@ public class UnifyFilter { //Nichts weiter unternehmen. Nur die Ausgabe des Unifikationsalgorithmus anzeigen. String log = Logger.getWholeLog(); //System.out.println(log); + writeLogFile(log); } catch (Exception e){ e.printStackTrace();