aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend29
1 files changed, 18 insertions, 11 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend
index 303c87b9..62ff92b2 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend
@@ -8,6 +8,8 @@ import org.eclipse.xtext.xbase.XFeatureCall
8import org.eclipse.xtext.xbase.XMemberFeatureCall 8import org.eclipse.xtext.xbase.XMemberFeatureCall
9import org.eclipse.xtext.xbase.XNumberLiteral 9import org.eclipse.xtext.xbase.XNumberLiteral
10import org.eclipse.xtext.xbase.XUnaryOperation 10import org.eclipse.xtext.xbase.XUnaryOperation
11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.PrimitiveTypeReference
12import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RealTypeReference
11 13
12class PExpressionGenerator { 14class PExpressionGenerator {
13 static val N_Base = "org.eclipse.xtext.xbase.lib." 15 static val N_Base = "org.eclipse.xtext.xbase.lib."
@@ -38,9 +40,9 @@ class PExpressionGenerator {
38 40
39 static val N_POWER2 = "java.lang.Math.pow" 41 static val N_POWER2 = "java.lang.Math.pow"
40 42
41 def dispatch CharSequence translateExpression(XBinaryOperation e, Map<PVariable,String> valueName) { 43 def dispatch CharSequence translateExpression(XBinaryOperation e, Map<PVariable,String> valueName, Map<PVariable, PrimitiveTypeReference> variable2Type) {
42 val left = e.leftOperand.translateExpression(valueName) 44 val left = e.leftOperand.translateExpression(valueName,variable2Type)
43 val right = e.rightOperand.translateExpression(valueName) 45 val right = e.rightOperand.translateExpression(valueName,variable2Type)
44 val feature = e.feature.qualifiedName 46 val feature = e.feature.qualifiedName
45 if(feature.isN(N_MINUS2)) { return '''(«left»-«right»)'''} 47 if(feature.isN(N_MINUS2)) { return '''(«left»-«right»)'''}
46 else if(feature.isN(N_PLUS2)) { return '''(«left»+«right»)''' } 48 else if(feature.isN(N_PLUS2)) { return '''(«left»+«right»)''' }
@@ -65,8 +67,8 @@ class PExpressionGenerator {
65 } 67 }
66 } 68 }
67 69
68 def dispatch CharSequence translateExpression(XUnaryOperation e, Map<PVariable,String> valueName) { 70 def dispatch CharSequence translateExpression(XUnaryOperation e, Map<PVariable,String> valueName, Map<PVariable, PrimitiveTypeReference> variable2Type) {
69 val operand = e.operand.translateExpression(valueName) 71 val operand = e.operand.translateExpression(valueName,variable2Type)
70 val feature = e.feature.qualifiedName 72 val feature = e.feature.qualifiedName
71 if(feature.isN(N_MINUS1)) { return '''(-«operand»)'''} 73 if(feature.isN(N_MINUS1)) { return '''(-«operand»)'''}
72 else if(feature.isN(N_PLUS1)) { return '''(+«operand»)'''} 74 else if(feature.isN(N_PLUS1)) { return '''(+«operand»)'''}
@@ -78,8 +80,8 @@ class PExpressionGenerator {
78 } 80 }
79 } 81 }
80 82
81 def dispatch CharSequence translateExpression(XMemberFeatureCall e, Map<PVariable,String> valueName) { 83 def dispatch CharSequence translateExpression(XMemberFeatureCall e, Map<PVariable,String> valueName, Map<PVariable, PrimitiveTypeReference> variable2Type) {
82 val transformedArguments = e.actualArguments.map[translateExpression(valueName)] 84 val transformedArguments = e.actualArguments.map[translateExpression(valueName,variable2Type)]
83 val feature = e.feature.qualifiedName 85 val feature = e.feature.qualifiedName
84 if(feature == N_POWER2) { 86 if(feature == N_POWER2) {
85 return '''Math.pow(«transformedArguments.get(0)»,«transformedArguments.get(1)»)''' 87 return '''Math.pow(«transformedArguments.get(0)»,«transformedArguments.get(1)»)'''
@@ -91,19 +93,24 @@ class PExpressionGenerator {
91 } 93 }
92 } 94 }
93 95
94 def dispatch CharSequence translateExpression(XFeatureCall e, Map<PVariable,String> valueName) { 96 def dispatch CharSequence translateExpression(XFeatureCall e, Map<PVariable,String> valueName, Map<PVariable, PrimitiveTypeReference> variable2Type) {
95 val featureName = e.feature.qualifiedName 97 val featureName = e.feature.qualifiedName
98 val type = variable2Type.entrySet.filter[it.key.name===featureName].head.value
96 val entryWithName = valueName.entrySet.filter[it.key.name == featureName].head 99 val entryWithName = valueName.entrySet.filter[it.key.name == featureName].head
97 if(entryWithName !== null) { 100 if(entryWithName !== null) {
98 return entryWithName.value 101 if(type instanceof RealTypeReference) {
102 return '''(«entryWithName.value».doubleValue)'''
103 } else {
104 return entryWithName.value
105 }
99 } else { 106 } else {
100 throw new IllegalArgumentException('''Feature call reference to unavailable variable "«featureName»"''') 107 throw new IllegalArgumentException('''Feature call reference to unavailable variable "«featureName»"''')
101 } 108 }
102 } 109 }
103 110
104 def dispatch CharSequence translateExpression(XNumberLiteral l, Map<PVariable,String> valueName) '''«l.value»''' 111 def dispatch CharSequence translateExpression(XNumberLiteral l, Map<PVariable,String> valueName, Map<PVariable, PrimitiveTypeReference> variable2Type) '''«l.value»'''
105 112
106 def dispatch CharSequence translateExpression(XExpression expression, Map<PVariable,String> valueName) { 113 def dispatch CharSequence translateExpression(XExpression expression, Map<PVariable,String> valueName, Map<PVariable, PrimitiveTypeReference> variable2Type) {
107 throw new UnsupportedOperationException('''Unsupported expression in check or eval: «expression.class.name», «expression»"''') 114 throw new UnsupportedOperationException('''Unsupported expression in check or eval: «expression.class.name», «expression»"''')
108 } 115 }
109} \ No newline at end of file 116} \ No newline at end of file