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 --- .../viatra2logic/Constraint2Logic.xtend | 32 ++++++++++++++++++++++ .../dslreasoner/viatra2logic/Viatra2Logic.xtend | 22 +++++++++++---- 2 files changed, 48 insertions(+), 6 deletions(-) (limited to 'Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic') diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend index e83b81e6..3d2c46a5 100644 --- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Constraint2Logic.xtend @@ -129,6 +129,38 @@ class Constraint2Logic { { return value.asTerm } + private def dispatch transformConstantValue( + Boolean value, + TracedOutput ecore2LogicTrace, + Viatra2LogicTrace viatra2LogicTrace, + Viatra2LogicConfiguration config) + { + return value.asTerm + } + private def dispatch transformConstantValue( + String value, + TracedOutput ecore2LogicTrace, + Viatra2LogicTrace viatra2LogicTrace, + Viatra2LogicConfiguration config) + { + return value.asTerm + } + private def dispatch transformConstantValue( + Double value, + TracedOutput ecore2LogicTrace, + Viatra2LogicTrace viatra2LogicTrace, + Viatra2LogicConfiguration config) + { + return value.asTerm + } + private def dispatch transformConstantValue( + Float value, + TracedOutput ecore2LogicTrace, + Viatra2LogicTrace viatra2LogicTrace, + Viatra2LogicConfiguration config) + { + return value.asTerm + } private def dispatch transformConstantValue(Object other, TracedOutput ecore2LogicTrace, Viatra2LogicTrace viatra2LogicTrace, diff --git a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend index d0c57db1..42c93da1 100644 --- a/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend +++ b/Framework/hu.bme.mit.inf.dslreasoner.viatra2logic/src/hu/bme/mit/inf/dslreasoner/viatra2logic/Viatra2Logic.xtend @@ -105,13 +105,15 @@ class Viatra2Logic { val relationName = '''pattern «pquery.fullyQualifiedName.replace('.',' ')»''' val parameters = new ArrayList(pquery.parameters.size) for(vParam: pquery.parameters) { + //println(">" + vParam.declaredUnaryType) + val type = vParam.declaredUnaryType as BaseEMFTypeKey val parameterType = transformTypeReference( - vParam.declaredUnaryType as BaseEMFTypeKey, + type, ecore2LogicTrace ) - if(parameterType == null) { - println(parameterType) - } +// if(parameterType == null) { +// println(parameterType) +// } val parameterName = '''parameter «vParam.name»''' val lParam = createVar(parameterName,parameterType) viatra2LogicTrace.parameter2Variable.put(pquery->vParam,lParam) @@ -252,13 +254,21 @@ class Viatra2Logic { def TypeDescriptor getType(PVariable v, PBody body, TracedOutput ecore2LogicTrace) { if(v.isPositiveVariable) { - val types = v.lookup( + val allTypes = v.lookup( body.getAllUnaryTypeRestrictions(EMFQueryMetaContext.INSTANCE)) + val types = allTypes.filter[it.inputKey instanceof BaseEMFTypeKey].toSet + if(types.size == 0) { - throw new AssertionError('''No type for «v.name»''') + throw new AssertionError(''' + No EMF type for «v.name». + Non-EMF types: [«FOR t : allTypes.filter[!types.contains(it)].map[inputKey.prettyPrintableName] SEPARATOR ','»«t»«ENDFOR»]''') } else if(types.size == 1){ return (types.head.inputKey as BaseEMFTypeKey).transformTypeReference(ecore2LogicTrace) } else { +// println(''' +// Type Judgements of «v.name» +// «types.map[inputKey.prettyPrintableName]» +// ''') return this.ecore2Logic.TypeofEClass(ecore2LogicTrace.trace, calculateCommonSubtype(types.map[ (it.inputKey as BaseEMFTypeKey).emfKey as EClass -- cgit v1.2.3-54-g00ecf