Debug-Code einfügen für Karthesisches Produkt in Unify

This commit is contained in:
JanUlrich 2015-06-26 12:25:46 +02:00
parent 2c4f735935
commit 442da87f48
5 changed files with 46 additions and 12 deletions

View File

@ -36,6 +36,10 @@ public class ConstraintsSet extends UndMenge<Pair> implements Iterable<OderConst
}
public void filterWrongConstraints(Unifier unify) {
/*
* Das ConstraintsSet enthält nur OderConstraints, welche UND-Verknüpft sind.
* Hier werden Constraints in den OderConstraints kontrolliert:
*/
for(OderConstraint constraint : this){
constraint.filterWrongConstraints(unify);
}

View File

@ -81,10 +81,15 @@ public class OderConstraint extends OderMenge<Pair>{
*/
}
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<UndConstraint> filteredConstraints = new Menge<>();
for(UndConstraint cons : this.getUndConstraints()){

View File

@ -34,6 +34,13 @@ public class UndConstraint extends UndMenge<Pair> {
Pair p = new Pair(type, rT);
this.set.add(new EinzelElement<Pair>(p));
}
@Override
public String toString() {
String ret = this.getConstraintPairs().toString();
return ret;
}
/*
public UndConstraint(ConstraintType p1, ConstraintType p2) {

View File

@ -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<Menge<Pair>> vecvecpair : cartProduktSets){
UndConstraint eq1cons = new UndConstraint();
for(Pair p : Eq1){
eq1cons.addConstraint(p.TA1, p.TA2);
}
cSet.add(eq1cons);
for(Menge<Menge<Pair>> vecvecpair : cartProduktSets){
OderConstraint orConstraints = new OderConstraint();
for(Menge<Pair> 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<Menge<Pair>> 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<Menge<Pair>> bigCartProductErg = cSet.cartesianProduct();
if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg);
*/
Menge<Menge<Pair>> 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<Pair> helpvp;
Menge<Menge<Pair>> bigCartProductErg = new Menge<Menge<Pair>>();
@ -689,6 +695,14 @@ public class Unify
}
//*/
if(! bigCartProductErg.equals(bigCartProductErg3)){
for(int i = 0; i<bigCartProductErg3.size();i++){
if(! (bigCartProductErg.get(i).equals(bigCartProductErg3.get(i)))){
System.out.println(); //TODO: Hier testen, wo der Unterschied zwischen den beiden Karthesischen Produkten ist
}
}
}
//Schritt 5: Einsetzen der Subst Regel
//Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert.
Menge<Menge<Pair>> changedSets = new Menge<Menge<Pair>>();

View File

@ -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();