From 8e1d7f703c69c8d584be58404b82d4f1b0c4b7ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Fri, 2 Jan 2015 12:44:31 +0100 Subject: [PATCH] Ergebnis Sourcefile.typeReconstruction ist neue Datenstruktur --- bin/.gitignore | 7 +++ src/de/dhbwstuttgart/syntaxtree/Method.java | 2 +- .../dhbwstuttgart/syntaxtree/SourceFile.java | 43 +++++++++++++++++++ .../typeinference/KarthesischesProdukt.java | 12 +++++- .../MartinTestCases/Matrix_lambda.jav | 2 +- 5 files changed, 63 insertions(+), 3 deletions(-) diff --git a/bin/.gitignore b/bin/.gitignore index fd04598c..a3254800 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1 +1,8 @@ +/bytecode/ /de/ +/log4j.xml +/log4jTesting.xml +/mycompiler/ +/parser/ +/plugindevelopment/ +/syntaxTree/ diff --git a/src/de/dhbwstuttgart/syntaxtree/Method.java b/src/de/dhbwstuttgart/syntaxtree/Method.java index 38f3bca5..7d690fb7 100755 --- a/src/de/dhbwstuttgart/syntaxtree/Method.java +++ b/src/de/dhbwstuttgart/syntaxtree/Method.java @@ -434,7 +434,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable // ino.end // ino.method.toString.23605.body { - return this.getType() + " "+ this.get_Name() +( (block!=null)?block.toString():""); + return this.getType() + " "+ this.get_Name() + parameterlist.toString() +( (block!=null)?block.toString():""); } // ino.end diff --git a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java index 2448f8ca..15513f2c 100755 --- a/src/de/dhbwstuttgart/syntaxtree/SourceFile.java +++ b/src/de/dhbwstuttgart/syntaxtree/SourceFile.java @@ -35,6 +35,7 @@ import de.dhbwstuttgart.typeinference.ConstraintsSet; import de.dhbwstuttgart.typeinference.FunN; import de.dhbwstuttgart.typeinference.FunNInterface; import de.dhbwstuttgart.typeinference.FunNMethod; +import de.dhbwstuttgart.typeinference.KarthesischesProdukt; import de.dhbwstuttgart.typeinference.Pair; import de.dhbwstuttgart.typeinference.ResultSet; import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; @@ -684,6 +685,7 @@ public class SourceFile return ret; } + ///////////////////////////////////////////////////////////////////////// // TypeReconstructionAlgorithmus ///////////////////////////////////////////////////////////////////////// @@ -1011,6 +1013,47 @@ public class SourceFile } return ret;}); Vector> vecressets = ressets.collect(Vector::new, Vector::add, Vector::addAll); + System.out.println("vecressets:\n" + vecressets); + //Vector vecressets = ressets.map(x -> x.size()).collect(Vector::new, Vector::add, Vector::addAll); + //Vector> ret = new KarthesischesProdukt().berechneKarthesischesProdukt(vecressets); + + Stream>> ressetspairs = vecressets.stream().map(x -> x.stream().map(y -> y.getUnifiedConstraints().getResultSet()) + .collect(Vector::new, Vector::add, Vector::addAll)); + + + java.util.Comparator>> comp = (x,y) -> { if (x.size() < y.size()) return -1; + else if (x.size() == y.size()) return 0; + else return 1; + }; + + //Vector ressetspairs_size = ressetspairs.sorted(comp).map(x -> x.size()).collect(Vector::new, Vector::add, Vector::addAll); + + + //cart. Produkt mit Linkverschiebung//FUNKTIONIERT NICHT WIRD ZU GROSS + Vector> cardprodret_start = new Vector<>(); + cardprodret_start.add(new Vector()); + //Vector> ret = ressetspairs.sorted(comp).reduce(cardprodret_start, (x, y) -> { + Vector> ret = ressetspairs.reduce(cardprodret_start, (x, y) -> { + Vector> cardprodret= new Vector<>(); + if (y.size() > 0) { + //System.out.println(y); + //Vector> cardprodretold = x; + //cardprodret = new Vector<>(); + for(int j = 0; j < x.size(); j++) { + for (int k = 0; k < y.size(); k++){ + Vector help = new Vector<>(); + help.addAll(y.elementAt(k)); + help.addAll(x.elementAt(j)); + cardprodret.add(help); + } + } + } + else + return new Vector<>(); //kein unifiziertes Ergebnis, damit wird das Geseamtergebnis [] + return cardprodret; + }); + + return new Vector(); /* // HOTI: Nur zur Info.Ich habe den Loglevel auf Info geschaltet, damit diff --git a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java index 48db9ff3..09418a0e 100755 --- a/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java +++ b/src/de/dhbwstuttgart/typeinference/KarthesischesProdukt.java @@ -5,7 +5,17 @@ import java.util.Vector; public class KarthesischesProdukt { public Vector> berechneKarthesischesProdukt(Vector> m1){ - if(m1.size()<2)return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); + if(m1.size()==0)return m1; + if(m1.size()==1){ + Vector> ret = new Vector>(); + for(M o : m1.firstElement()){ + Vector v = new Vector(); + v.add(o); + ret.add(v); + } + return ret; + //return m1;//throw new TypinferenzException("m1 hat zu wenige Objekte für ein Karthesisches Produkt. Es müssen mindestens 2 sein."); + } return berechneKarthesischesProdukt(m1, null); } diff --git a/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav b/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav index 293f776e..4a863321 100644 --- a/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav +++ b/test/plugindevelopment/MartinTestCases/Matrix_lambda.jav @@ -1,5 +1,5 @@ import java.util.Vector; class Matrix extends Vector> { - op = (Matrix m) -> (f) -> f.apply(this, m); + op = (m) -> (f) -> f.apply(this, m); } \ No newline at end of file