From d82c4d3ebff3dacae19aec1015940085c11433c3 Mon Sep 17 00:00:00 2001 From: Andreas Stadelmeier Date: Mon, 10 Jun 2024 08:57:04 +0200 Subject: [PATCH] First Workin Matrix Test --- pom.xml | 1 - .../input/parser/ConstraintSet.g4 | 12 +- src/main/asp/unify.pl | 34 +- .../dhbwstuttgart/input/ConstraintParser.java | 20 +- .../dhbwstuttgart/sat/asp/ASPGenerator.java | 18 +- .../sat/asp/ExtendsRelation.java | 6 + .../dhbwstuttgart/sat/asp/TypeParameter.java | 8 + src/test/java/UnifyTest.java | 573 ++++++++++++++++++ 8 files changed, 657 insertions(+), 15 deletions(-) create mode 100644 src/main/java/de/dhbwstuttgart/sat/asp/ExtendsRelation.java create mode 100644 src/main/java/de/dhbwstuttgart/sat/asp/TypeParameter.java diff --git a/pom.xml b/pom.xml index 1470115..a73761e 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,6 @@ http://maven.apache.org/maven-v4_0_0.xsd"> maven-compiler-plugin 3.8.0 - --enable-preview 21 21 diff --git a/src/main/antlr4/de/dhbwstuttgart/input/parser/ConstraintSet.g4 b/src/main/antlr4/de/dhbwstuttgart/input/parser/ConstraintSet.g4 index adcbcf4..4552470 100644 --- a/src/main/antlr4/de/dhbwstuttgart/input/parser/ConstraintSet.g4 +++ b/src/main/antlr4/de/dhbwstuttgart/input/parser/ConstraintSet.g4 @@ -1,8 +1,11 @@ grammar ConstraintSet; -constraintSet : (constraints | orConstraint)+; +constraintSet : (constraints | orConstraint | extendsRelation)+; -orConstraint : '{' constraints ('|' constraints)+ '}'; +extendsRelation: IDENTIFIER typeParams? '<' type; +typeParams : '<' IDENTIFIER (',' IDENTIFIER)* '>'; + +orConstraint : '{' constraints ('|' constraints)* '}'; constraints : '{' constraint+ '}' | constraint+; constraint: subtypeCons | equalsCons; @@ -10,12 +13,11 @@ subtypeCons : type '<.' type; equalsCons : type '=.' type; type : tph | namedType; -tph : LOWERCASELETTER IDENTIFIER?; +tph : '_' IDENTIFIER; namedType : IDENTIFIER params?; params : '<' type (',' type)* '>'; -LOWERCASELETTER : [a-z]; -IDENTIFIER: (LOWERCASELETTER | [A-Z])+; +IDENTIFIER: [A-Za-z.]+; KOMMA : ',' -> skip; NEWLINE : [\r\n]+ -> skip; diff --git a/src/main/asp/unify.pl b/src/main/asp/unify.pl index cd0717b..e34b3a8 100644 --- a/src/main/asp/unify.pl +++ b/src/main/asp/unify.pl @@ -1,5 +1,35 @@ % TEST INPUT -orCons(undCons(equalsdot(tph("e"),type("bj",null)),undCons(lessdot(tph("e"),type("Integer",null)),undCons(lessdot(tph("p"),tph("l")),undCons(equalsdot(type("Boolean",null),tph("g")),undCons(equalsdot(tph("t"),type("bc",null)),undCons(lessdot(type("Vector",params(type("Integer",null))),tph("r")),undCons(lessdot(tph("f"),tph("e")), null))))))), null). +orCons(undCons(lessdot(tph("_BG"),type("java.lang.Number",null)),undCons(equalsdot(tph("_BE"),type("java.lang.Boolean",null)),undCons(equalsdot(type("java.lang.Boolean",null),tph("_AH")),undCons(lessdot(tph("_BC"),type("java.lang.Number",null)),undCons(lessdot(tph("_G"),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_AS")),undCons(equalsdot(type("java.lang.Boolean",null),tph("_H")),undCons(lessdot(tph("_AP"),tph("_AM")),undCons(lessdot(tph("_AV"),tph("_AU")),undCons(equalsdot(tph("_AI"),type("Matrix",null)),undCons(lessdot(tph("_AD"),tph("_AB")),undCons(lessdot(type("Matrix",null),tph("_AD")),undCons(lessdot(tph("_AF"),type("java.lang.Number",null)),undCons(equalsdot(tph("_AU"),tph("_CD")),undCons(equalsdot(tph("_H"),type("java.lang.Boolean",null)),undCons(lessdot(tph("_BV"),tph("_BA")),undCons(lessdot(tph("_V"),type("java.lang.Integer",null)),undCons(lessdot(tph("_J"),type("java.lang.Number",null)),undCons(lessdot(tph("_AY"),type("java.lang.Number",null)),undCons(equalsdot(tph("_AH"),type("java.lang.Boolean",null)),undCons(equalsdot(type("java.lang.Boolean",null),tph("_BE")),undCons(equalsdot(tph("_AF"),tph("_CK")),undCons(equalsdot(type("java.lang.Boolean",null),tph("_AW")),undCons(lessdot(tph("_AU"),type("java.lang.Number",null)),undCons(lessdot(tph("_BD"),tph("_BC")),undCons(equalsdot(tph("_AW"),type("java.lang.Boolean",null)),undCons(lessdot(tph("_BB"),tph("_BA")),undCons(lessdot(tph("_AG"),tph("_AF")),undCons(equalsdot(tph("_S"),type("Matrix",null)),undCons(equalsdot(type("java.util.Vector",params(type("java.util.Vector",params(type("java.lang.Integer",null))))),type("java.util.Vector",params(tph("_ANQ")))),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Number",null)),undCons(equalsdot(type("java.util.Vector",params(type("java.util.Vector",params(type("java.lang.Integer",null))))),type("java.util.Vector",params(tph("_ANR")))),undCons(equalsdot(tph("_BC"),tph("_BW")),undCons(equalsdot(tph("_AQ"),type("Matrix",null)),undCons(lessdot(tph("_AK"),type("java.lang.Number",null)), null))))))))))))))))))))))))))))))))))), null). +orCons(undCons(equalsdot(tph("_AE"),type("Matrix",null)),undCons(lessdot(type("Matrix",null),type("Matrix",null)), null)), null). +orCons(undCons(equalsdot(tph("_AG"),type("java.lang.Integer",null)), null), null). +orCons(undCons(equalsdot(tph("_AI"),type("java.util.AbstractList",params(tph("_AMV")))),undCons(lessdot(type("java.lang.Integer",null),tph("_AK")), null)),orCons(undCons(equalsdot(tph("_AI"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),tph("_AK")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AK")),undCons(equalsdot(tph("_AI"),type("java.util.List",params(tph("_AMU")))), null)),orCons(undCons(equalsdot(tph("_AI"),type("java.util.AbstractList",params(tph("_AMV")))),undCons(lessdot(type("java.lang.Integer",null),tph("_AK")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AK")),undCons(equalsdot(tph("_AI"),type("java.util.Vector",params(tph("_AMW")))), null)),orCons(undCons(equalsdot(tph("_AI"),type("java.util.List",params(tph("_AMU")))),undCons(lessdot(type("java.lang.Integer",null),tph("_AK")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AK")),undCons(equalsdot(tph("_AI"),type("java.util.Vector",params(tph("_AMW")))), null)),orCons(undCons(equalsdot(tph("_AI"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),tph("_AK")), null)), null)))))))). +orCons(undCons(lessdot(tph("_AF"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AQ"),type("java.util.Vector",params(tph("_AMX")))),undCons(lessdot(tph("_AMX"),tph("_AP")), null))),orCons(undCons(lessdot(tph("_AF"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AQ"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_AP")), null))),orCons(undCons(lessdot(tph("_AF"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AQ"),type("java.util.Vector",params(tph("_AMX")))),undCons(lessdot(tph("_AMX"),tph("_AP")), null))),orCons(undCons(lessdot(tph("_AF"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AQ"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_AP")), null))), null)))). +orCons(undCons(lessdot(type("java.util.Vector",params(tph("_AMY"))),type("java.util.Vector",params(type("java.lang.Integer",null)))),undCons(equalsdot(tph("_AT"),type("java.util.Vector",params(type("GE",null)))), null)), null). +orCons(undCons(equalsdot(tph("_AV"),type("java.lang.Integer",null)), null), null). +orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("Matrix",null)), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("java.util.List",params(tph("_AMZ")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("java.util.Vector",params(tph("_ANB")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("java.util.List",params(tph("_AMZ")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("java.util.AbstractList",params(tph("_ANA")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("java.util.AbstractList",params(tph("_ANA")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("Matrix",null)), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_AY")),undCons(equalsdot(tph("_AM"),type("java.util.Vector",params(tph("_ANB")))), null)), null)))))))). +orCons(undCons(equalsdot(tph("_BB"),type("java.lang.Integer",null)), null), null). +orCons(undCons(equalsdot(tph("_BD"),type("java.lang.Integer",null)), null), null). +orCons(undCons(equalsdot(tph("_AM"),type("java.util.Vector",params(tph("_ANE")))),undCons(lessdot(type("java.lang.Integer",null),tph("_BG")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_BG")),undCons(equalsdot(tph("_AM"),type("Matrix",null)), null)),orCons(undCons(equalsdot(tph("_AM"),type("java.util.Vector",params(tph("_ANE")))),undCons(lessdot(type("java.lang.Integer",null),tph("_BG")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_BG")),undCons(equalsdot(tph("_AM"),type("java.util.AbstractList",params(tph("_AND")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_BG")),undCons(equalsdot(tph("_AM"),type("Matrix",null)), null)),orCons(undCons(equalsdot(tph("_AM"),type("java.util.List",params(tph("_ANC")))),undCons(lessdot(type("java.lang.Integer",null),tph("_BG")), null)),orCons(undCons(equalsdot(tph("_AM"),type("java.util.List",params(tph("_ANC")))),undCons(lessdot(type("java.lang.Integer",null),tph("_BG")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_BG")),undCons(equalsdot(tph("_AM"),type("java.util.AbstractList",params(tph("_AND")))), null)), null)))))))). +orCons(undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_BK")),undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AM"),type("Matrix",null)), null))),orCons(undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_BK")),undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AM"),type("Matrix",null)), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANG"),tph("_BK")),undCons(equalsdot(tph("_AM"),type("java.util.AbstractList",params(tph("_ANG")))), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AM"),type("java.util.Vector",params(tph("_ANH")))),undCons(lessdot(tph("_ANH"),tph("_BK")), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANG"),tph("_BK")),undCons(equalsdot(tph("_AM"),type("java.util.AbstractList",params(tph("_ANG")))), null))),orCons(undCons(lessdot(tph("_ANF"),tph("_BK")),undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AM"),type("java.util.List",params(tph("_ANF")))), null))),orCons(undCons(lessdot(tph("_ANF"),tph("_BK")),undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AM"),type("java.util.List",params(tph("_ANF")))), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANH"),tph("_BK")),undCons(equalsdot(tph("_AM"),type("java.util.Vector",params(tph("_ANH")))), null))), null)))))))). +orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANI"),tph("_BR")),undCons(equalsdot(tph("_AC"),type("java.util.List",params(tph("_ANI")))), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AC"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_BR")), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_AC"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_BR")), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANJ"),tph("_BR")),undCons(equalsdot(tph("_AC"),type("java.util.AbstractList",params(tph("_ANJ")))), null))),orCons(undCons(equalsdot(tph("_AC"),type("java.util.Vector",params(tph("_ANK")))),undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANK"),tph("_BR")), null))),orCons(undCons(equalsdot(tph("_AC"),type("java.util.Vector",params(tph("_ANK")))),undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANK"),tph("_BR")), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANI"),tph("_BR")),undCons(equalsdot(tph("_AC"),type("java.util.List",params(tph("_ANI")))), null))),orCons(undCons(lessdot(tph("_BC"),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANJ"),tph("_BR")),undCons(equalsdot(tph("_AC"),type("java.util.AbstractList",params(tph("_ANJ")))), null))), null)))))))). +orCons(undCons(lessdot(tph("_ANM"),tph("_BO")),undCons(equalsdot(tph("_BR"),type("java.util.AbstractList",params(tph("_ANM")))),undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)), null))),orCons(undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_BR"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_BO")), null))),orCons(undCons(equalsdot(tph("_BR"),type("java.util.List",params(tph("_ANL")))),undCons(lessdot(tph("_ANL"),tph("_BO")),undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)), null))),orCons(undCons(equalsdot(tph("_BR"),type("java.util.List",params(tph("_ANL")))),undCons(lessdot(tph("_ANL"),tph("_BO")),undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)), null))),orCons(undCons(lessdot(tph("_ANN"),tph("_BO")),undCons(equalsdot(tph("_BR"),type("java.util.Vector",params(tph("_ANN")))),undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)), null))),orCons(undCons(lessdot(tph("_ANM"),tph("_BO")),undCons(equalsdot(tph("_BR"),type("java.util.AbstractList",params(tph("_ANM")))),undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)), null))),orCons(undCons(lessdot(tph("_ANN"),tph("_BO")),undCons(equalsdot(tph("_BR"),type("java.util.Vector",params(tph("_ANN")))),undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)), null))),orCons(undCons(lessdot(tph("_AU"),type("java.lang.Integer",null)),undCons(equalsdot(tph("_BR"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_BO")), null))), null)))))))). +orCons(undCons(lessdot(tph("_BO"),type("java.lang.Integer",null)),undCons(equalsdot(type("java.lang.Integer",null),tph("_BU")),undCons(lessdot(tph("_BK"),type("java.lang.Integer",null)), null))), null). +orCons(undCons(lessdot(tph("_BU"),type("java.lang.Integer",null)),undCons(lessdot(tph("_BA"),type("java.lang.Integer",null)),undCons(equalsdot(type("java.lang.Integer",null),tph("_BV")), null))), null). +orCons(undCons(lessdot(tph("_BA"),type("java.util.Vector",params(type("java.lang.Integer",null)))),undCons(equalsdot(tph("_AS"),type("Matrix",null)), null)),orCons(undCons(lessdot(tph("_BA"),type("java.util.Vector",params(type("java.lang.Integer",null)))),undCons(equalsdot(tph("_AS"),type("Matrix",null)), null)),orCons(undCons(equalsdot(tph("_AS"),type("java.util.Vector",params(tph("_ANO")))),undCons(lessdot(tph("_BA"),tph("_ANO")), null)),orCons(undCons(equalsdot(tph("_AS"),type("java.util.Vector",params(tph("_ANO")))),undCons(lessdot(tph("_BA"),tph("_ANO")), null)), null)))). +orCons(undCons(lessdot(tph("_AS"),type("java.util.Vector",params(type("java.lang.Integer",null)))),undCons(equalsdot(tph("_AD"),type("Matrix",null)), null)),orCons(undCons(equalsdot(tph("_AD"),type("java.util.Vector",params(tph("_ANP")))),undCons(lessdot(tph("_AS"),tph("_ANP")), null)),orCons(undCons(lessdot(tph("_AS"),type("java.util.Vector",params(type("java.lang.Integer",null)))),undCons(equalsdot(tph("_AD"),type("Matrix",null)), null)),orCons(undCons(equalsdot(tph("_AD"),type("java.util.Vector",params(tph("_ANP")))),undCons(lessdot(tph("_AS"),tph("_ANP")), null)), null)))). +orCons(undCons(equalsdot(tph("_G"),type("java.lang.Integer",null)), null), null). +orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_J")),undCons(equalsdot(tph("_F"),type("java.util.List",params(tph("_ANS")))), null)),orCons(undCons(equalsdot(tph("_F"),type("java.util.AbstractList",params(tph("_ANT")))),undCons(lessdot(type("java.lang.Integer",null),tph("_J")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_J")),undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANU")))), null)),orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),tph("_J")), null)),orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),tph("_J")), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_J")),undCons(equalsdot(tph("_F"),type("java.util.List",params(tph("_ANS")))), null)),orCons(undCons(lessdot(type("java.lang.Integer",null),tph("_J")),undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANU")))), null)),orCons(undCons(equalsdot(tph("_F"),type("java.util.AbstractList",params(tph("_ANT")))),undCons(lessdot(type("java.lang.Integer",null),tph("_J")), null)), null)))))))). +orCons(undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANV"),tph("_N")),undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANV")))), null))),orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))),orCons(undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANV"),tph("_N")),undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANV")))), null))),orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))), null)))). +orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))),orCons(undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANX")))),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANX"),tph("_N")), null))),orCons(undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANX")))),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANX"),tph("_N")), null))),orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))), null)))). +orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))),orCons(undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))),orCons(undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANZ")))),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANZ"),tph("_N")), null))),orCons(undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_ANZ")))),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_ANZ"),tph("_N")), null))), null)))). +orCons(undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))),orCons(undCons(lessdot(tph("_AOB"),tph("_N")),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_AOB")))), null))),orCons(undCons(lessdot(tph("_AOB"),tph("_N")),undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(equalsdot(tph("_F"),type("java.util.Vector",params(tph("_AOB")))), null))),orCons(undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(equalsdot(tph("_F"),type("Matrix",null)),undCons(lessdot(type("java.util.Vector",params(type("java.lang.Integer",null))),tph("_N")), null))), null)))). +orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(lessdot(tph("_N"),tph("_AOA")),undCons(equalsdot(tph("_S"),type("java.util.Vector",params(tph("_AOA")))), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(lessdot(tph("_N"),tph("_ANW")),undCons(equalsdot(tph("_S"),type("java.util.List",params(tph("_ANW")))), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(lessdot(tph("_N"),tph("_ANW")),undCons(equalsdot(tph("_S"),type("java.util.List",params(tph("_ANW")))), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(lessdot(tph("_N"),tph("_AOA")),undCons(equalsdot(tph("_S"),type("java.util.Vector",params(tph("_AOA")))), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(equalsdot(tph("_S"),type("Matrix",null)),undCons(lessdot(tph("_N"),type("java.util.Vector",params(type("java.lang.Integer",null)))), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(equalsdot(tph("_S"),type("Matrix",null)),undCons(lessdot(tph("_N"),type("java.util.Vector",params(type("java.lang.Integer",null)))), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(equalsdot(tph("_S"),type("java.util.AbstractList",params(tph("_ANY")))),undCons(lessdot(tph("_N"),tph("_ANY")), null))),orCons(undCons(lessdot(type("java.lang.Boolean",null),tph("_R")),undCons(equalsdot(tph("_S"),type("java.util.AbstractList",params(tph("_ANY")))),undCons(lessdot(tph("_N"),tph("_ANY")), null))), null)))))))). +orCons(undCons(equalsdot(tph("_U"),type("java.lang.Integer",null)), null), null). +orCons(undCons(lessdot(type("java.lang.Integer",null),type("java.lang.Integer",null)),undCons(lessdot(tph("_U"),type("java.lang.Integer",null)),undCons(equalsdot(type("java.lang.Integer",null),tph("_V")), null))), null). + +super(type("java.lang.Boolean",null),type("Object",null)):-super(type("java.lang.Boolean",null)).super(type("java.lang.Integer",null),type("java.lang.Number",null)):-super(type("java.lang.Integer",null)).super(type("java.lang.Number",null),type("Object",null)):-super(type("java.lang.Number",null)).super(type("java.util.Vector",params(XX)),type("Object",null)):-super(type("java.util.Vector",params(XX))).super(type("Matrix",null),type("java.util.Vector",params(type("java.util.Vector",params(type("java.lang.Integer",null)))))):-super(type("Matrix",null)). + + %%%%% super(type("MyPair", params(X, Y)), type("Pair", params(Y, X))) :- super(type("MyPair", params(X, Y))). @@ -18,8 +48,6 @@ less(A,B) :- super(type(A, AP), type(B, BP)). % Or-Constraints undCons(A,B) :- orCons(undCons(A,B), null). undCons(A,B); orCons(C,D) :- orCons(undCons(A,B), orCons(C,D)). -undCons(A,B); undCons(C,D) :- orCons(undCons(A,B), undCons(C,D)). -lessdot(A,B); lessdot(C,D) :- orCons(lessdot(A,B), lessdot(C,D)). lessdot(A,B) :- undCons(lessdot(A,B), _). undCons(B,C) :- undCons(A, undCons(B, C)). diff --git a/src/main/java/de/dhbwstuttgart/input/ConstraintParser.java b/src/main/java/de/dhbwstuttgart/input/ConstraintParser.java index 23cc4da..0a7a4c7 100644 --- a/src/main/java/de/dhbwstuttgart/input/ConstraintParser.java +++ b/src/main/java/de/dhbwstuttgart/input/ConstraintParser.java @@ -6,6 +6,7 @@ import de.dhbwstuttgart.sat.asp.*; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTree; import java.util.ArrayList; import java.util.List; @@ -13,6 +14,23 @@ import java.util.Set; import java.util.stream.Collectors; public class ConstraintParser { + + public static List parseExtendsRelations(String cons){ + CharStream input = CharStreams.fromString(cons); + de.dhbwstuttgart.input.parser.ConstraintSetLexer lexer = new ConstraintSetLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lexer); + ConstraintSetParser parser = new ConstraintSetParser(tokens); + ConstraintSetParser.ConstraintSetContext conSet = parser.constraintSet(); //Parsen + List ret = new ArrayList<>(); + for(var ext : conSet.extendsRelation()){ + if(ext.typeParams()!=null){ + ret.add(new ExtendsRelation(ext.IDENTIFIER().getText(), ext.typeParams().IDENTIFIER().stream().map(x -> new TypeParameter(x.getText())).toList(), (NamedType) parseType(ext.type()))); + }else{ + ret.add(new ExtendsRelation(ext.IDENTIFIER().getText(), List.of(), (NamedType) parseType(ext.type()))); + } + } + return ret; + } public static List>> parse(String cons){ CharStream input = CharStreams.fromString(cons); de.dhbwstuttgart.input.parser.ConstraintSetLexer lexer = new ConstraintSetLexer(input); @@ -22,7 +40,7 @@ public static List>> parse(String cons){ Set undCons = conSet.constraints().stream().flatMap(c -> parseUndConstraint(c).stream()).collect(Collectors.toSet()); var ret = new ArrayList>>(); var orCons = conSet.orConstraint().stream().map(ConstraintParser::parseOrConstraint).toList(); - ret.add(List.of(undCons)); + if(undCons.size() > 0)ret.add(List.of(undCons)); ret.addAll(orCons); return ret; } diff --git a/src/main/java/de/dhbwstuttgart/sat/asp/ASPGenerator.java b/src/main/java/de/dhbwstuttgart/sat/asp/ASPGenerator.java index 933d443..3c56666 100644 --- a/src/main/java/de/dhbwstuttgart/sat/asp/ASPGenerator.java +++ b/src/main/java/de/dhbwstuttgart/sat/asp/ASPGenerator.java @@ -1,5 +1,6 @@ package de.dhbwstuttgart.sat.asp; +import java.util.HashMap; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -14,12 +15,11 @@ public class ASPGenerator { } public static String generateOrCons(List> undCon){ - if(undCon.size() == 1){ - return "orCons(" + generateUndCons(undCon.iterator().next()) + ", null)"; + if(undCon.size() < 2){ + return "orCons(" + generateUndCons(undCon.getFirst()) + ", null)"; }else { - // undCOns verschachteln - Set first = undCon.get(0); - undCon = undCon.stream().filter(x->!first.equals(x)).collect(Collectors.toList()); + Set first = undCon.getFirst(); + undCon = undCon.subList(1, undCon.size()); return "orCons(" + generateUndCons(first) + ","+ generateOrCons(undCon) + ")"; }/* String ret = "orCons("; @@ -42,4 +42,12 @@ public class ASPGenerator { } } + public static String generateExtendsRelations(List extendsRelations) { + String ret = ""; + for(var x : extendsRelations){ + NamedType subtype = new NamedType(x.subtypeName(), x.subtypeParams().stream().map(i -> (Type)i).toList()); + ret += "super("+subtype.toASP()+","+x.superType().toASP()+"):-super("+subtype.toASP()+")."; + } + return ret; + } } diff --git a/src/main/java/de/dhbwstuttgart/sat/asp/ExtendsRelation.java b/src/main/java/de/dhbwstuttgart/sat/asp/ExtendsRelation.java new file mode 100644 index 0000000..c50ef5e --- /dev/null +++ b/src/main/java/de/dhbwstuttgart/sat/asp/ExtendsRelation.java @@ -0,0 +1,6 @@ +package de.dhbwstuttgart.sat.asp; + +import java.util.List; + +public record ExtendsRelation(String subtypeName, List subtypeParams, NamedType superType) { +} diff --git a/src/main/java/de/dhbwstuttgart/sat/asp/TypeParameter.java b/src/main/java/de/dhbwstuttgart/sat/asp/TypeParameter.java new file mode 100644 index 0000000..dc5209a --- /dev/null +++ b/src/main/java/de/dhbwstuttgart/sat/asp/TypeParameter.java @@ -0,0 +1,8 @@ +package de.dhbwstuttgart.sat.asp; + +public record TypeParameter(String name) implements Type{ + @Override + public String toASP() { + return "X"+name; + } +} diff --git a/src/test/java/UnifyTest.java b/src/test/java/UnifyTest.java index e959d5e..824025b 100644 --- a/src/test/java/UnifyTest.java +++ b/src/test/java/UnifyTest.java @@ -29,6 +29,579 @@ public class UnifyTest { System.out.println(ASPGenerator.generateASP(ConstraintParser.parse(input))); } + @Test + public void extendsRelationParserTest(){ + String input = "Matrix < Vector>," + + "Vector < List," + + "MyPair < Pair," + + "Pair < Object," + + "List < Object"; + System.out.println(ASPGenerator.generateExtendsRelations(ConstraintParser.parseExtendsRelations(input))); + //TODO: Finish Extends Relation parser + } + + @Test + public void matrix(){ + String input = "java.lang.Boolean < Object," + + "java.lang.Integer < java.lang.Number," + + "java.lang.Number < Object," + //TODO: Implement smaller + "java.util.Vector < Object," + + "Matrix < java.util.Vector>\n" + + "_BE=.java.lang.Boolean\n" + + "java.util.Vector>=.java.util.Vector<_ANR>\n" + + "_AU<.java.lang.Number\n" + + "java.util.Vector<._AS\n" + + "_AI=.Matrix\n" + + "_AF=._CK\n" + + "_AP<._AM\n" + + "_BC<.java.lang.Number\n" + + "java.util.Vector>=.java.util.Vector<_ANQ>\n" + + "_S=.Matrix\n" + + "_BD<._BC\n" + + "_AV<._AU\n" + + "_AU<.java.lang.Number\n" + + "_BV<._BA\n" + + "Matrix<._AD\n" + + "_J<.java.lang.Number\n" + + "java.lang.Boolean=._AH\n" + + "_V<.java.lang.Integer\n" + + "_AY<.java.lang.Number\n" + + "_BC=._BW\n" + + "_AK<.java.lang.Number\n" + + "_AH=.java.lang.Boolean\n" + + "_BC<.java.lang.Number\n" + + "_AQ=.Matrix\n" + + "_G<.java.lang.Integer\n" + + "java.lang.Integer<.java.lang.Number\n" + + "_AF<.java.lang.Number\n" + + "_AW=.java.lang.Boolean\n" + + "_BB<._BA\n" + + "java.lang.Boolean=._AW\n" + + "java.lang.Boolean=._H\n" + + "_H=.java.lang.Boolean\n" + + "_AD<._AB\n" + + "_AF<.java.lang.Number\n" + + "_BG<.java.lang.Number\n" + + "java.lang.Boolean=._BE\n" + + "_AU=._CD\n" + + "_AG<._AF\n" + + "{\n" + + "{\n" + + "Matrix<.Matrix\n" + + "_AE=.Matrix\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AG=.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AI=.java.util.AbstractList<_AMV>\n" + + "java.lang.Integer<._AK\n" + + "}\n" + + "|{\n" + + "_AI=.Matrix\n" + + "java.lang.Integer<._AK\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._AK\n" + + "_AI=.java.util.List<_AMU>\n" + + "}\n" + + "|{\n" + + "_AI=.java.util.AbstractList<_AMV>\n" + + "java.lang.Integer<._AK\n" + + "}\n" + + "|{\n" + + "_AI=.java.util.Vector<_AMW>\n" + + "java.lang.Integer<._AK\n" + + "}\n" + + "|{\n" + + "_AI=.java.util.List<_AMU>\n" + + "java.lang.Integer<._AK\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._AK\n" + + "_AI=.java.util.Vector<_AMW>\n" + + "}\n" + + "|{\n" + + "_AI=.Matrix\n" + + "java.lang.Integer<._AK\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AF<.java.lang.Integer\n" + + "_AQ=.java.util.Vector<_AMX>\n" + + "_AMX<._AP\n" + + "}\n" + + "|{\n" + + "_AF<.java.lang.Integer\n" + + "java.util.Vector<._AP\n" + + "_AQ=.Matrix\n" + + "}\n" + + "|{\n" + + "_AF<.java.lang.Integer\n" + + "_AQ=.java.util.Vector<_AMX>\n" + + "_AMX<._AP\n" + + "}\n" + + "|{\n" + + "java.util.Vector<._AP\n" + + "_AF<.java.lang.Integer\n" + + "_AQ=.Matrix\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AT=.java.util.Vector\n" + + "java.util.Vector<_AMY><.java.util.Vector\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AV=.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AM=.Matrix\n" + + "java.lang.Integer<._AY\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._AY\n" + + "_AM=.java.util.List<_AMZ>\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._AY\n" + + "_AM=.java.util.Vector<_ANB>\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.List<_AMZ>\n" + + "java.lang.Integer<._AY\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._AY\n" + + "_AM=.java.util.AbstractList<_ANA>\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.AbstractList<_ANA>\n" + + "java.lang.Integer<._AY\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._AY\n" + + "_AM=.Matrix\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.Vector<_ANB>\n" + + "java.lang.Integer<._AY\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_BB=.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_BD=.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AM=.java.util.Vector<_ANE>\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.Matrix\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.Vector<_ANE>\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.AbstractList<_AND>\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.Matrix\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.List<_ANC>\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.List<_ANC>\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.AbstractList<_AND>\n" + + "java.lang.Integer<._BG\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AM=.Matrix\n" + + "_BC<.java.lang.Integer\n" + + "java.util.Vector<._BK\n" + + "}\n" + + "|{\n" + + "_AM=.Matrix\n" + + "java.util.Vector<._BK\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_ANG<._BK\n" + + "_AM=.java.util.AbstractList<_ANG>\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.Vector<_ANH>\n" + + "_BC<.java.lang.Integer\n" + + "_ANH<._BK\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.AbstractList<_ANG>\n" + + "_ANG<._BK\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.List<_ANF>\n" + + "_ANF<._BK\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_AM=.java.util.List<_ANF>\n" + + "_ANF<._BK\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_ANH<._BK\n" + + "_BC<.java.lang.Integer\n" + + "_AM=.java.util.Vector<_ANH>\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_ANI<._BR\n" + + "_AC=.java.util.List<_ANI>\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_AC=.Matrix\n" + + "java.util.Vector<._BR\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_AC=.Matrix\n" + + "_BC<.java.lang.Integer\n" + + "java.util.Vector<._BR\n" + + "}\n" + + "|{\n" + + "_ANJ<._BR\n" + + "_AC=.java.util.AbstractList<_ANJ>\n" + + "_BC<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_BC<.java.lang.Integer\n" + + "_AC=.java.util.Vector<_ANK>\n" + + "_ANK<._BR\n" + + "}\n" + + "|{\n" + + "_AC=.java.util.Vector<_ANK>\n" + + "_BC<.java.lang.Integer\n" + + "_ANK<._BR\n" + + "}\n" + + "|{\n" + + "_BC<.java.lang.Integer\n" + + "_AC=.java.util.List<_ANI>\n" + + "_ANI<._BR\n" + + "}\n" + + "|{\n" + + "_AC=.java.util.AbstractList<_ANJ>\n" + + "_BC<.java.lang.Integer\n" + + "_ANJ<._BR\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_BR=.java.util.AbstractList<_ANM>\n" + + "_ANM<._BO\n" + + "_AU<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "java.util.Vector<._BO\n" + + "_AU<.java.lang.Integer\n" + + "_BR=.Matrix\n" + + "}\n" + + "|{\n" + + "_AU<.java.lang.Integer\n" + + "_ANL<._BO\n" + + "_BR=.java.util.List<_ANL>\n" + + "}\n" + + "|{\n" + + "_AU<.java.lang.Integer\n" + + "_BR=.java.util.List<_ANL>\n" + + "_ANL<._BO\n" + + "}\n" + + "|{\n" + + "_ANN<._BO\n" + + "_BR=.java.util.Vector<_ANN>\n" + + "_AU<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_ANM<._BO\n" + + "_AU<.java.lang.Integer\n" + + "_BR=.java.util.AbstractList<_ANM>\n" + + "}\n" + + "|{\n" + + "_ANN<._BO\n" + + "_BR=.java.util.Vector<_ANN>\n" + + "_AU<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_BR=.Matrix\n" + + "java.util.Vector<._BO\n" + + "_AU<.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_BK<.java.lang.Integer\n" + + "java.lang.Integer=._BU\n" + + "_BO<.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_BU<.java.lang.Integer\n" + + "_BA<.java.lang.Integer\n" + + "java.lang.Integer=._BV\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_BA<.java.util.Vector\n" + + "_AS=.Matrix\n" + + "}\n" + + "|{\n" + + "_AS=.Matrix\n" + + "_BA<.java.util.Vector\n" + + "}\n" + + "|{\n" + + "_BA<._ANO\n" + + "_AS=.java.util.Vector<_ANO>\n" + + "}\n" + + "|{\n" + + "_BA<._ANO\n" + + "_AS=.java.util.Vector<_ANO>\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_AS<.java.util.Vector\n" + + "_AD=.Matrix\n" + + "}\n" + + "|{\n" + + "_AS<._ANP\n" + + "_AD=.java.util.Vector<_ANP>\n" + + "}\n" + + "|{\n" + + "_AS<.java.util.Vector\n" + + "_AD=.Matrix\n" + + "}\n" + + "|{\n" + + "_AS<._ANP\n" + + "_AD=.java.util.Vector<_ANP>\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_G=.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_F=.java.util.List<_ANS>\n" + + "java.lang.Integer<._J\n" + + "}\n" + + "|{\n" + + "_F=.java.util.AbstractList<_ANT>\n" + + "java.lang.Integer<._J\n" + + "}\n" + + "|{\n" + + "_F=.java.util.Vector<_ANU>\n" + + "java.lang.Integer<._J\n" + + "}\n" + + "|{\n" + + "_F=.Matrix\n" + + "java.lang.Integer<._J\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._J\n" + + "_F=.Matrix\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._J\n" + + "_F=.java.util.List<_ANS>\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._J\n" + + "_F=.java.util.Vector<_ANU>\n" + + "}\n" + + "|{\n" + + "java.lang.Integer<._J\n" + + "_F=.java.util.AbstractList<_ANT>\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_F=.java.util.Vector<_ANV>\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_ANV<._N\n" + + "}\n" + + "|{\n" + + "_F=.Matrix\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "java.util.Vector<._N\n" + + "}\n" + + "|{\n" + + "_ANV<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_F=.java.util.Vector<_ANV>\n" + + "}\n" + + "|{\n" + + "_F=.Matrix\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "java.util.Vector<._N\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_F=.Matrix\n" + + "java.util.Vector<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_F=.java.util.Vector<_ANX>\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_ANX<._N\n" + + "}\n" + + "|{\n" + + "_F=.java.util.Vector<_ANX>\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_ANX<._N\n" + + "}\n" + + "|{\n" + + "java.util.Vector<._N\n" + + "_F=.Matrix\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "java.util.Vector<._N\n" + + "_F=.Matrix\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "java.util.Vector<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_F=.Matrix\n" + + "}\n" + + "|{\n" + + "_F=.java.util.Vector<_ANZ>\n" + + "_ANZ<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "}\n" + + "|{\n" + + "_F=.java.util.Vector<_ANZ>\n" + + "_ANZ<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_F=.Matrix\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "java.util.Vector<._N\n" + + "}\n" + + "|{\n" + + "_AOB<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_F=.java.util.Vector<_AOB>\n" + + "}\n" + + "|{\n" + + "_F=.java.util.Vector<_AOB>\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_AOB<._N\n" + + "}\n" + + "|{\n" + + "java.util.Vector<._N\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "_F=.Matrix\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_N<._AOA\n" + + "java.lang.Boolean<._R\n" + + "_S=.java.util.Vector<_AOA>\n" + + "}\n" + + "|{\n" + + "_N<._ANW\n" + + "java.lang.Boolean<._R\n" + + "_S=.java.util.List<_ANW>\n" + + "}\n" + + "|{\n" + + "_S=.java.util.List<_ANW>\n" + + "java.lang.Boolean<._R\n" + + "_N<._ANW\n" + + "}\n" + + "|{\n" + + "_N<._AOA\n" + + "java.lang.Boolean<._R\n" + + "_S=.java.util.Vector<_AOA>\n" + + "}\n" + + "|{\n" + + "_N<.java.util.Vector\n" + + "java.lang.Boolean<._R\n" + + "_S=.Matrix\n" + + "}\n" + + "|{\n" + + "java.lang.Boolean<._R\n" + + "_S=.Matrix\n" + + "_N<.java.util.Vector\n" + + "}\n" + + "|{\n" + + "java.lang.Boolean<._R\n" + + "_S=.java.util.AbstractList<_ANY>\n" + + "_N<._ANY\n" + + "}\n" + + "|{\n" + + "java.lang.Boolean<._R\n" + + "_S=.java.util.AbstractList<_ANY>\n" + + "_N<._ANY\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "_U=.java.lang.Integer\n" + + "}\n" + + "}\n" + + "{\n" + + "{\n" + + "java.lang.Integer<.java.lang.Integer\n" + + "java.lang.Integer=._V\n" + + "_U<.java.lang.Integer\n" + + "}\n" + + "}\n"; + System.out.println(ASPGenerator.generateASP(ConstraintParser.parse(input))); + System.out.println(ASPGenerator.generateExtendsRelations(ConstraintParser.parseExtendsRelations(input))); + } + @Test public void matrix2k(){ //und-constraints