forked from JavaTX/JavaCompilerCore
merge
This commit is contained in:
commit
bf8e6d1492
4
.gitignore
vendored
4
.gitignore
vendored
@ -10,3 +10,7 @@ bin
|
|||||||
*.jar
|
*.jar
|
||||||
*.war
|
*.war
|
||||||
*.ear
|
*.ear
|
||||||
|
|
||||||
|
# IDEs
|
||||||
|
.classpath
|
||||||
|
|
||||||
|
@ -575,8 +575,9 @@ public class RuleSet implements IRuleSet{
|
|||||||
if(pair.getPairOp() == PairOperator.EQUALSDOT
|
if(pair.getPairOp() == PairOperator.EQUALSDOT
|
||||||
&& pair.getLhsType() instanceof PlaceholderType)
|
&& pair.getLhsType() instanceof PlaceholderType)
|
||||||
lhsType = (PlaceholderType) pair.getLhsType();
|
lhsType = (PlaceholderType) pair.getLhsType();
|
||||||
|
rhsType = pair.getRhsType(); //PL eingefuegt 2017-09-29 statt !((rhsType = pair.getRhsType()) instanceof PlaceholderType)
|
||||||
if(lhsType != null
|
if(lhsType != null
|
||||||
&& !((rhsType = pair.getRhsType()) instanceof PlaceholderType)
|
//&& !((rhsType = pair.getRhsType()) instanceof PlaceholderType) //PL geloescht am 2017-09-29 Begründung: auch Typvariablen muessen ersetzt werden.
|
||||||
&& typeMap.get(lhsType) > 1 // The type occurs in more pairs in the set than just the recent pair.
|
&& typeMap.get(lhsType) > 1 // The type occurs in more pairs in the set than just the recent pair.
|
||||||
&& !rhsType.getTypeParams().occurs(lhsType)) {
|
&& !rhsType.getTypeParams().occurs(lhsType)) {
|
||||||
Unifier uni = new Unifier(lhsType, rhsType);
|
Unifier uni = new Unifier(lhsType, rhsType);
|
||||||
@ -688,7 +689,10 @@ public class RuleSet implements IRuleSet{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Set<UnifyPair>> reduceFunN(UnifyPair pair) {
|
public Optional<Set<UnifyPair>> reduceFunN(UnifyPair pair) {
|
||||||
if(pair.getPairOp() != PairOperator.SMALLERDOT)
|
if((pair.getPairOp() != PairOperator.SMALLERDOT)
|
||||||
|
&& (pair.getPairOp() != PairOperator.EQUALSDOT)) //PL 2017-10-03 hinzugefuegt
|
||||||
|
//da Regel auch fuer EQUALSDOT anwendbar
|
||||||
|
//TODO: fuer allen anderen Relationen noch pruefen
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
|
|
||||||
UnifyType lhsType = pair.getLhsType();
|
UnifyType lhsType = pair.getLhsType();
|
||||||
|
@ -73,7 +73,8 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
* @param fc The finite closure
|
* @param fc The finite closure
|
||||||
* @return The set of all principal type unifiers
|
* @return The set of all principal type unifiers
|
||||||
*/
|
*/
|
||||||
protected Set<Set<UnifyPair>> unify(Set<UnifyPair> eq, IFiniteClosure fc, boolean parallel) {
|
protected Set<Set<UnifyPair>> unify(Set<UnifyPair> eq, IFiniteClosure fc, boolean parallel) {
|
||||||
|
System.out.println(eq);
|
||||||
/*
|
/*
|
||||||
* Step 1: Repeated application of reduce, adapt, erase, swap
|
* Step 1: Repeated application of reduce, adapt, erase, swap
|
||||||
*/
|
*/
|
||||||
@ -119,7 +120,10 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
// Sets of the "second level"
|
// Sets of the "second level"
|
||||||
Set<UnifyPair> undefinedPairs = new HashSet<>();
|
Set<UnifyPair> undefinedPairs = new HashSet<>();
|
||||||
Set<Set<Set<Set<UnifyPair>>>> secondLevelSets = calculatePairSets(eq2s, fc, undefinedPairs);
|
Set<Set<Set<Set<UnifyPair>>>> secondLevelSets = calculatePairSets(eq2s, fc, undefinedPairs);
|
||||||
|
//PL 2017-09-20: Im calculatePairSets wird möglicherweise O .< java.lang.Integer
|
||||||
|
//nicht ausgewertet Faculty Beispiel im 1. Schritt
|
||||||
|
//PL 2017-10-03 geloest, muesste noch mit FCs mit kleineren
|
||||||
|
//Typen getestet werden.
|
||||||
// If pairs occured that did not match one of the cartesian product cases,
|
// If pairs occured that did not match one of the cartesian product cases,
|
||||||
// those pairs are contradictory and the unification is impossible.
|
// those pairs are contradictory and the unification is impossible.
|
||||||
if(!undefinedPairs.isEmpty())
|
if(!undefinedPairs.isEmpty())
|
||||||
@ -158,18 +162,23 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
// Flatten the cartesian product
|
// Flatten the cartesian product
|
||||||
Set<UnifyPair> eqPrime = new HashSet<>();
|
Set<UnifyPair> eqPrime = new HashSet<>();
|
||||||
setToFlatten.stream().forEach(x -> eqPrime.addAll(x));
|
setToFlatten.stream().forEach(x -> eqPrime.addAll(x));
|
||||||
|
System.out.println(eqPrime);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Step 5: Substitution
|
* Step 5: Substitution
|
||||||
*/
|
*/
|
||||||
Optional<Set<UnifyPair>> eqPrimePrime = rules.subst(eqPrime);
|
Optional<Set<UnifyPair>> eqPrimePrime = rules.subst(eqPrime);
|
||||||
|
System.out.println(eq);
|
||||||
|
System.out.println(eqPrimePrime);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Step 6 a) Restart (fork) for pairs where subst was applied
|
* Step 6 a) Restart (fork) for pairs where subst was applied
|
||||||
*/
|
*/
|
||||||
if(parallel) {
|
if(parallel) {
|
||||||
if (eqPrime.equals(eq))
|
if //(eqPrime.equals(eq)) //PL 2017-09-29 auskommentiert und durch
|
||||||
|
(!eqPrimePrime.isPresent()) //PL 2071-09-29 dies ersetzt
|
||||||
|
//Begruendung: Wenn in der Substitution keine Veraenderung
|
||||||
|
//(!eqPrimePrime.isPresent()) erfolgt ist, ist das Ergebnis erzielt.
|
||||||
eqPrimePrimeSet.add(eqPrime);
|
eqPrimePrimeSet.add(eqPrime);
|
||||||
else if(eqPrimePrime.isPresent()) {
|
else if(eqPrimePrime.isPresent()) {
|
||||||
TypeUnifyTask fork = new TypeUnifyTask(eqPrimePrime.get(), fc, true);
|
TypeUnifyTask fork = new TypeUnifyTask(eqPrimePrime.get(), fc, true);
|
||||||
@ -183,7 +192,10 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // sequentiell (Step 6b is included)
|
else { // sequentiell (Step 6b is included)
|
||||||
if (eqPrime.equals(eq))
|
if //(eqPrime.equals(eq)) //PL 2017-09-29 auskommentiert und durch
|
||||||
|
(!eqPrimePrime.isPresent()) //PL 2071-09-29 dies ersetzt
|
||||||
|
//Begruendung: Wenn in der Substitution keine Veraenderung
|
||||||
|
//(!eqPrimePrime.isPresent()) erfolgt ist, ist das Ergebnis erzielt.
|
||||||
eqPrimePrimeSet.add(eqPrime);
|
eqPrimePrimeSet.add(eqPrime);
|
||||||
else if(eqPrimePrime.isPresent())
|
else if(eqPrimePrime.isPresent())
|
||||||
eqPrimePrimeSet.addAll(unify(eqPrimePrime.get(), fc, false));
|
eqPrimePrimeSet.addAll(unify(eqPrimePrime.get(), fc, false));
|
||||||
@ -440,7 +452,8 @@ public class TypeUnifyTask extends RecursiveTask<Set<Set<UnifyPair>>> {
|
|||||||
|
|
||||||
for(UnifyType c : cs) {
|
for(UnifyType c : cs) {
|
||||||
Set<UnifyType> thetaQs = fc.getChildren(c).stream().collect(Collectors.toCollection(HashSet::new));
|
Set<UnifyType> thetaQs = fc.getChildren(c).stream().collect(Collectors.toCollection(HashSet::new));
|
||||||
//thetaQs.add(thetaPrime);
|
thetaQs.add(thetaPrime); //PL 2017-10-03: War auskommentiert habe ich wieder einkommentiert,
|
||||||
|
//da children offensichtlich ein echtes kleiner und kein kleinergleich ist
|
||||||
Set<UnifyType> thetaQPrimes = new HashSet<>();
|
Set<UnifyType> thetaQPrimes = new HashSet<>();
|
||||||
TypeParams cParams = c.getTypeParams();
|
TypeParams cParams = c.getTypeParams();
|
||||||
if(cParams.size() == 0)
|
if(cParams.size() == 0)
|
||||||
|
@ -45,12 +45,12 @@ public class JavaTXCompilerTest {
|
|||||||
//filesToTest.add(new File(rootDirectory+"Matrix.jav"));
|
//filesToTest.add(new File(rootDirectory+"Matrix.jav"));
|
||||||
//filesToTest.add(new File(rootDirectory+"Import.jav"));
|
//filesToTest.add(new File(rootDirectory+"Import.jav"));
|
||||||
JavaTXCompiler compiler = new JavaTXCompiler(fileToTest);
|
JavaTXCompiler compiler = new JavaTXCompiler(fileToTest);
|
||||||
compiler.typeInference();
|
List<ResultSet> results = compiler.typeInference();
|
||||||
|
|
||||||
for(File f : compiler.sourceFiles.keySet()){
|
for(File f : compiler.sourceFiles.keySet()){
|
||||||
SourceFile sf = compiler.sourceFiles.get(f);
|
SourceFile sf = compiler.sourceFiles.get(f);
|
||||||
System.out.println(ASTTypePrinter.print(sf));
|
System.out.println(ASTTypePrinter.print(sf));
|
||||||
List<ResultSet> results = compiler.typeInference();
|
//List<ResultSet> results = compiler.typeInference(); PL 2017-10-03 vor die For-Schleife gezogen
|
||||||
assert results.size()>0;
|
assert results.size()>0;
|
||||||
for(ResultSet resultSet : results){
|
for(ResultSet resultSet : results){
|
||||||
Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet);
|
Set<TypeInsert> result = TypeInsertFactory.createTypeInsertPoints(sf, resultSet);
|
||||||
|
Loading…
Reference in New Issue
Block a user