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) { 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){ for(OderConstraint constraint : this){
constraint.filterWrongConstraints(unify); constraint.filterWrongConstraints(unify);
} }

View File

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

View File

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

View File

@ -630,25 +630,30 @@ public class Unify
} }
//Schritt 4, Teil 2: Kartesisches Produkt bilden. //Schritt 4, Teil 2: Kartesisches Produkt bilden.
/* ///*
//TODO: Vor der Bildung des Karthesischen Produkts unmÃgliche Kombinationen ausfiltern //TODO: Vor der Bildung des Karthesischen Produkts unmÃgliche Kombinationen ausfiltern
//cartProduktSets kontrollieren: //cartProduktSets kontrollieren:
ConstraintsSet cSet = new ConstraintsSet(); ConstraintsSet cSet = new ConstraintsSet();
UndConstraint eq1cons = new UndConstraint();
for(Pair p : Eq1){
eq1cons.addConstraint(p.TA1, p.TA2);
}
cSet.add(eq1cons);
for(Menge<Menge<Pair>> vecvecpair : cartProduktSets){ for(Menge<Menge<Pair>> vecvecpair : cartProduktSets){
OderConstraint orConstraints = new OderConstraint(); OderConstraint orConstraints = new OderConstraint();
for(Menge<Pair> pairs : vecvecpair){ for(Menge<Pair> pairs : vecvecpair){
UndConstraint uCons = new UndConstraint(); UndConstraint uCons = new UndConstraint();
for(Pair p : pairs){ for(Pair p : pairs){
uCons.addConstraint(new ConstraintPair(p)); uCons.addConstraint(p.TA1, p.TA2);
} }
orConstraints.addConstraint(uCons); orConstraints.addConstraint(uCons);
} }
cSet.addItems(orConstraints); cSet.add(orConstraints);
} }
SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY); SectionLogger log = Logger.getSectionLogger(Unify.class.getName(), Section.UNIFY);
if(filter){ if(filter && false){
Unifier filterUnify = (pairs)->{ Unifier filterUnify = (pairs)->{
String pairsString = pairs.toString(); String pairsString = pairs.toString();
Menge<Menge<Pair>> retValue = new Menge<>(); Menge<Menge<Pair>> retValue = new Menge<>();
@ -656,18 +661,19 @@ public class Unify
//Unify.unify(pairs, fc_tto, (i)->{}); //Unify.unify(pairs, fc_tto, (i)->{});
log.debug("Filtere Constraints:\n"+pairsString); log.debug("Filtere Constraints:\n"+pairsString);
log.debug("Ergebnis: "+ retValue); log.debug("Ergebnis: "+ retValue);
return retValue;}; return retValue;
};
log.debug("Filtere mithilfe von 'filterWrongConstraints': "+cSet); log.debug("Filtere mithilfe von 'filterWrongConstraints': "+cSet);
cSet.filterWrongConstraints(filterUnify); cSet.filterWrongConstraints(filterUnify);
} }
Menge<Menge<Pair>> bigCartProductErg = cSet.cartesianProduct(); Menge<Menge<Pair>> bigCartProductErg3 = cSet.cartesianProduct();
if(filter)log.debug("Karthesisches Produkt nach Filterung: "+bigCartProductErg); 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. //Hier wird aus den in Schritt 4, Teil 1 erzeugten Vektoren das Kartesische Produkt gebildet.
Menge<Pair> helpvp; Menge<Pair> helpvp;
Menge<Menge<Pair>> bigCartProductErg = new Menge<Menge<Pair>>(); 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 //Schritt 5: Einsetzen der Subst Regel
//Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert. //Hier werden die TPHs substituiert, und dann nach geänderten und nicht geänderten Sets sortiert.
Menge<Menge<Pair>> changedSets = new Menge<Menge<Pair>>(); Menge<Menge<Pair>> changedSets = new Menge<Menge<Pair>>();

View File

@ -8,6 +8,7 @@ import java.io.UnsupportedEncodingException;
import org.junit.Test; import org.junit.Test;
import plugindevelopment.TypeInsertTester;
import de.dhbwstuttgart.core.MyCompiler; import de.dhbwstuttgart.core.MyCompiler;
import de.dhbwstuttgart.core.MyCompilerAPI; import de.dhbwstuttgart.core.MyCompilerAPI;
import de.dhbwstuttgart.logger.Logger; import de.dhbwstuttgart.logger.Logger;
@ -17,6 +18,8 @@ import de.dhbwstuttgart.parser.JavaParser.yyException;
import de.dhbwstuttgart.syntaxtree.SourceFile; import de.dhbwstuttgart.syntaxtree.SourceFile;
import de.dhbwstuttgart.typeinference.Menge; import de.dhbwstuttgart.typeinference.Menge;
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertPoint;
import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet;
public class UnifyFilter { public class UnifyFilter {
public final static String rootDirectory = System.getProperty("user.dir")+"/test/unify/"; 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. //Nichts weiter unternehmen. Nur die Ausgabe des Unifikationsalgorithmus anzeigen.
String log = Logger.getWholeLog(); String log = Logger.getWholeLog();
//System.out.println(log); //System.out.println(log);
writeLogFile(log); writeLogFile(log);
} catch (Exception e){ } catch (Exception e){
e.printStackTrace(); e.printStackTrace();