diff options
author | Oszkar Semerath <semerath@mit.bme.hu> | 2020-05-11 04:06:18 +0200 |
---|---|---|
committer | Oszkar Semerath <semerath@mit.bme.hu> | 2020-05-11 04:06:18 +0200 |
commit | 4c80187e223ed4b500a68a5d83446f80565e3440 (patch) | |
tree | a5c1bc9c40dc082ba087791b96992afecc1e885d /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PExpressionGenerator.xtend | |
parent | Satelite case study update for Models-Attribute paper (diff) | |
download | VIATRA-Generator-4c80187e223ed4b500a68a5d83446f80565e3440.tar.gz VIATRA-Generator-4c80187e223ed4b500a68a5d83446f80565e3440.tar.zst VIATRA-Generator-4c80187e223ed4b500a68a5d83446f80565e3440.zip |
Instead of Bigdecimals doubleValue are used in check
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.xtend | 29 |
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 | |||
8 | import org.eclipse.xtext.xbase.XMemberFeatureCall | 8 | import org.eclipse.xtext.xbase.XMemberFeatureCall |
9 | import org.eclipse.xtext.xbase.XNumberLiteral | 9 | import org.eclipse.xtext.xbase.XNumberLiteral |
10 | import org.eclipse.xtext.xbase.XUnaryOperation | 10 | import org.eclipse.xtext.xbase.XUnaryOperation |
11 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.PrimitiveTypeReference | ||
12 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RealTypeReference | ||
11 | 13 | ||
12 | class PExpressionGenerator { | 14 | class 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 |