modified: src/de/dhbwstuttgart/typeinference/unify/model/OrderingUnifyPair.java
weitere Fälle in die Ordnung eingebaut
This commit is contained in:
parent
cba489f279
commit
831bf1fe17
@ -29,8 +29,13 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
|
|
||||||
public int compare (UnifyPair left, UnifyPair right) {
|
public int compare (UnifyPair left, UnifyPair right) {
|
||||||
if (left == null || right == null)
|
if (left == null || right == null)
|
||||||
System.out.println("Fehler");
|
System.out.println("Fehler");
|
||||||
return fc.compare(left.getRhsType(), right.getRhsType());
|
if (left.getLhsType() instanceof PlaceholderType) {
|
||||||
|
return fc.compare(left.getRhsType(), right.getRhsType());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return fc.compare(left.getLhsType(), right.getLhsType());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pair<Integer,Set<UnifyPair>> compare (UnifyType left, UnifyType right) {
|
public Pair<Integer,Set<UnifyPair>> compare (UnifyType left, UnifyType right) {
|
||||||
@ -54,9 +59,21 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int compare (Set<UnifyPair> left, Set<UnifyPair> right) {
|
public int compare (Set<UnifyPair> left, Set<UnifyPair> right) {
|
||||||
if (!true) {
|
Set<UnifyPair> lefteq = left.stream()
|
||||||
Stream<UnifyPair> lseq = left.stream().filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT));
|
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT))
|
||||||
Stream<UnifyPair> rseq = right.stream().filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT));
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
|
Set<UnifyPair> righteq = right.stream()
|
||||||
|
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT))
|
||||||
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
|
Set<UnifyPair> leftle = left.stream()
|
||||||
|
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
||||||
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
|
Set<UnifyPair> rightle = right.stream()
|
||||||
|
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
||||||
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
|
if (lefteq.size() > 1) {
|
||||||
|
Stream<UnifyPair> lseq = lefteq.stream(); //left.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT));
|
||||||
|
Stream<UnifyPair> rseq = righteq.stream(); //right.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT));
|
||||||
BinaryOperator<HashMap<UnifyType,UnifyPair>> combiner = (x,y) -> { x.putAll(y); return x;};
|
BinaryOperator<HashMap<UnifyType,UnifyPair>> combiner = (x,y) -> { x.putAll(y); return x;};
|
||||||
HashMap<UnifyType,UnifyPair> hm = rseq.reduce(new HashMap<UnifyType,UnifyPair>(), (x, y)-> { x.put(y.getLhsType(),y); return x; }, combiner);
|
HashMap<UnifyType,UnifyPair> hm = rseq.reduce(new HashMap<UnifyType,UnifyPair>(), (x, y)-> { x.put(y.getLhsType(),y); return x; }, combiner);
|
||||||
lseq = lseq.filter(x -> !(hm.get(x.getLhsType()) == null));
|
lseq = lseq.filter(x -> !(hm.get(x.getLhsType()) == null));
|
||||||
@ -64,34 +81,44 @@ public class OrderingUnifyPair extends Ordering<Set<UnifyPair>> {
|
|||||||
if (!si.isPresent()) return 0;
|
if (!si.isPresent()) return 0;
|
||||||
else return si.get();
|
else return si.get();
|
||||||
}
|
}
|
||||||
else {
|
if (lefteq.size() == 1 && righteq.size() == 1) {
|
||||||
//TODO 2018-03-02: hier muessen mehree =. eingefuegt werden und alle weiteren Faelle pruefen
|
//TODO 2018-03-02: hier muessen mehree =. eingefuegt werden und alle weiteren Faelle pruefen
|
||||||
Optional<UnifyPair> lseq = left.stream()
|
UnifyPair lseq = lefteq.iterator().next();
|
||||||
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT)).findFirst();
|
UnifyPair rseq = righteq.iterator().next();
|
||||||
Optional<UnifyPair> rseq = right.stream()
|
/*Set<UnifyPair> lsle = left.stream()
|
||||||
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.EQUALSDOT)).findFirst();
|
|
||||||
Set<UnifyPair> lsle = left.stream()
|
|
||||||
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
||||||
.collect(Collectors.toCollection(HashSet::new));
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
Set<UnifyPair> rsle = right.stream()
|
Set<UnifyPair> rsle = right.stream()
|
||||||
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
.filter(x -> (x.getLhsType() instanceof PlaceholderType && x.getPairOp() == PairOperator.SMALLERDOTWC))
|
||||||
.collect(Collectors.toCollection(HashSet::new));
|
.collect(Collectors.toCollection(HashSet::new));
|
||||||
Pair<Integer, Set<UnifyPair>> int_Unifier = compare(lseq.get().getRhsType(), rseq.get().getRhsType());
|
*/
|
||||||
|
Pair<Integer, Set<UnifyPair>> int_Unifier = compare(lseq.getRhsType(), rseq.getRhsType());
|
||||||
Unifier uni = new Unifier();
|
Unifier uni = new Unifier();
|
||||||
int_Unifier.getValue().stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
int_Unifier.getValue().stream().forEach(x -> uni.add((PlaceholderType) x.getLhsType(), x.getRhsType()));
|
||||||
if (lsle.size() == 0) return int_Unifier.getKey();
|
if (leftle.size() == 0) return int_Unifier.getKey();
|
||||||
else {
|
else {
|
||||||
Stream <UnifyPair> lslestr = lsle.stream().map(uni::apply);
|
Stream <UnifyPair> lslestr = leftle.stream().map(uni::apply);
|
||||||
Stream <UnifyPair> rslestr = rsle.stream().map(uni::apply);
|
Stream <UnifyPair> rslestr = rightle.stream().map(uni::apply);
|
||||||
BinaryOperator<HashMap<UnifyType,UnifyPair>> combiner = (x,y) -> { x.putAll(y); return x;};
|
BinaryOperator<HashMap<UnifyType,UnifyPair>> combiner = (x,y) -> { x.putAll(y); return x;};
|
||||||
HashMap<UnifyType,UnifyPair> hm = rslestr.reduce(new HashMap<UnifyType,UnifyPair>(), (x, y)-> { x.put(y.getLhsType(),y); return x; }, combiner);
|
|
||||||
lseq = lseq.filter(x -> !(hm.get(x.getLhsType()) == null));
|
HashMap<UnifyType,UnifyPair> hm;
|
||||||
Optional<Integer> si = lslestr.map(x -> compare(x, hm.get(x.getLhsType()))).reduce((x,y)-> { if (x == y) return x; else return 0; } );
|
Optional<Integer> si;
|
||||||
|
if (leftle.iterator().next().getLhsType() instanceof PlaceholderType) {
|
||||||
|
hm = rslestr.reduce(new HashMap<UnifyType,UnifyPair>(), (x, y)-> { x.put(y.getLhsType(),y); return x; }, combiner);
|
||||||
|
lslestr = lslestr.filter(x -> !(hm.get(x.getLhsType()) == null));
|
||||||
|
si = lslestr.map(x -> compare(x, hm.get(x.getLhsType()))).reduce((x,y)-> { if (x == y) return x; else return 0; } );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hm = rslestr.reduce(new HashMap<UnifyType,UnifyPair>(), (x, y)-> { x.put(y.getRhsType(),y); return x; }, combiner);
|
||||||
|
rslestr = rslestr.filter(x -> !(hm.get(x.getRhsType()) == null));
|
||||||
|
si = rslestr.map(x -> compare(x, hm.get(x.getRhsType()))).reduce((x,y)-> { if (x == y) return x; else return 0; } );
|
||||||
|
}
|
||||||
if (!si.isPresent()) return 0;
|
if (!si.isPresent()) return 0;
|
||||||
else return si.get();
|
else return si.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user