From f42954a45bea9f3e40090447804f33f12c080640 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sat, 24 Mar 2018 21:44:49 -0400 Subject: upgraded attribute support for the graph solver --- .../logic2viatra/patterns/PatternGenerator.xtend | 3 ++- .../patterns/RelationDefinitionIndexer.xtend | 23 +++++++++++++++++----- .../logic2viatra/patterns/TypeIndexer.xtend | 8 ++++---- 3 files changed, 24 insertions(+), 10 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend index 7caa3e19..34094cac 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend @@ -89,7 +89,8 @@ class PatternGenerator { String targetVariable, Modality modality) { - throw new UnsupportedOperationException + '''find «modality.name.toLowerCase»InRelation«canonizeName('''«attribute.name» attribute «attribute.EContainingClass.name»''') + »(problem,interpretation,«sourceVariable»,«targetVariable»);''' } public def canonizeName(String name) { diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend index 794e706b..39b6fbc0 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/RelationDefinitionIndexer.xtend @@ -91,7 +91,8 @@ class RelationDefinitionIndexer { }«ENDFOR» ''' } catch(UnsupportedOperationException e) { - throw new UnsupportedOperationException('''Can not transform pattern "«p.fullyQualifiedName»"!''',e) + e.printStackTrace + throw new UnsupportedOperationException('''Can not transform pattern "«p.fullyQualifiedName»"! Reason: «e.message»''',e) } } private def transformPatternWithTwoParameters(RelationDefinition relation, PQuery p, Modality modality) { @@ -137,7 +138,7 @@ class RelationDefinitionIndexer { modality.toMustMay) } else throw new UnsupportedOperationException('''unknown key: «key.class»''') } else { - throw new UnsupportedOperationException() + throw new UnsupportedOperationException('''Unsupported touple size: «touple.size»''') } } @@ -196,10 +197,22 @@ class RelationDefinitionIndexer { var String additionalDefinition; if(target instanceof EEnumLiteral) { targetString = '''const_«target.name»_«target.EEnum.name»''' - additionalDefinition = '''DefinedElement.name(«targetString»,"«target.name» «target.EEnum.name»"); LogicProblem.elements(problem,«targetString»);''' + additionalDefinition = '''DefinedElement.name(«targetString»,"«target.name» «target.EEnum.name»"); //LogicProblem.elements(problem,«targetString»);''' } else if(target instanceof Integer) { - targetString = target.toString - additionalDefinition = '''''' + targetString = '''const_«target»_Integer''' + additionalDefinition = '''IntegerElement.value(«targetString»,«target»);''' + } else if(target instanceof Boolean) { + targetString = '''const_«target»_Boolean''' + additionalDefinition = '''BooleanElement.value(«targetString»,«target»);''' + } else if(target instanceof String) { + targetString = '''const_«target»_String''' + additionalDefinition = '''StringElement.value(«targetString»,"«target»");''' + } else if(target instanceof Double) { + targetString = '''const_«target»_Number''' + additionalDefinition = '''RealElement.value(«targetString»,"«target»");''' + } else if(target instanceof Float) { + targetString = '''const_«target»_Number''' + additionalDefinition = '''RealElement.value(«targetString»,"«target»");''' } else { throw new UnsupportedOperationException('''Unknown constant type: «target.class»''') } diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend index 9afec0de..630fad51 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexer.xtend @@ -23,16 +23,16 @@ abstract class TypeIndexer { reference.referred.referInstanceOf(modality,variableName) } public def dispatch CharSequence referInstanceOfByReference(BoolTypeReference reference, Modality modality, String variableName) { - '''find instaneofBoolean(problem, interpretation, «variableName»);''' + '''BooleanElement(«variableName»);''' } public def dispatch CharSequence referInstanceOfByReference(IntTypeReference reference, Modality modality, String variableName) { - '''find pattern instaneofInteger(problem, interpretation, «variableName»);''' + '''IntegerElement(«variableName»);''' } public def dispatch CharSequence referInstanceOfByReference(RealTypeReference reference, Modality modality, String variableName) { - '''find pattern instaneofReal(problem, interpretation, «variableName»);''' + '''RealElement(«variableName»);''' } public def dispatch CharSequence referInstanceOfByReference(StringTypeReference reference, Modality modality, String variableName) { - '''find pattern instaneofString(problem, interpretation, «variableName»);''' + '''StringElement(«variableName»);''' } } \ No newline at end of file -- cgit v1.2.3-54-g00ecf