aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Alloy-Solver2/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/Logic2AlloyLanguageMapper_FunctionMapper.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/Alloy-Solver2/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/Logic2AlloyLanguageMapper_FunctionMapper.xtend')
-rw-r--r--Solvers/Alloy-Solver2/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/Logic2AlloyLanguageMapper_FunctionMapper.xtend87
1 files changed, 0 insertions, 87 deletions
diff --git a/Solvers/Alloy-Solver2/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/Logic2AlloyLanguageMapper_FunctionMapper.xtend b/Solvers/Alloy-Solver2/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/Logic2AlloyLanguageMapper_FunctionMapper.xtend
deleted file mode 100644
index 0915c306..00000000
--- a/Solvers/Alloy-Solver2/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/src/hu/bme/mit/inf/dlsreasoner/alloy/reasoner/builder/Logic2AlloyLanguageMapper_FunctionMapper.xtend
+++ /dev/null
@@ -1,87 +0,0 @@
1package hu.bme.mit.inf.dlsreasoner.alloy.reasoner.builder
2
3import hu.bme.mit.inf.dslreasoner.alloyLanguage.AlloyLanguageFactory
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference
6import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSMultiplicity
7import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSSignatureBody
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDefinition
9import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
10import java.util.HashMap
11
12class Logic2AlloyLanguageMapper_FunctionMapper {
13 private val extension AlloyLanguageFactory factory = AlloyLanguageFactory.eINSTANCE
14 private val Logic2AlloyLanguageMapper_Support support = new Logic2AlloyLanguageMapper_Support;
15 val Logic2AlloyLanguageMapper base;
16 public new(Logic2AlloyLanguageMapper base) {
17 this.base = base
18 }
19
20 def protected dispatch transformFunction(FunctionDeclaration f, Logic2AlloyLanguageMapperTrace trace) {
21 if(!trace.constantDefinitions.containsKey(f)) {
22 if(transformedToHostedField(f,trace)) transformFunctionToFieldOfSignature(f,trace)
23 else transformFunctionToGlobalRelation(f,trace)
24 }
25 }
26
27 def protected transformedToHostedField(FunctionDeclaration f, Logic2AlloyLanguageMapperTrace trace) {
28 if(f.parameters.size == 1 && f.parameters.head instanceof ComplexTypeReference) {
29 val head = f.parameters.head
30 if(head instanceof ComplexTypeReference) {
31 val types = base.typeMapper.transformTypeReference(head.referred,base,trace)
32 return types.size == 1
33 }
34 }
35 return (f.parameters.size == 1 && f.parameters.head instanceof ComplexTypeReference)
36 }
37 def protected transformFunctionToFieldOfSignature(FunctionDeclaration f,Logic2AlloyLanguageMapperTrace trace) {
38 val param = (f.parameters.head as ComplexTypeReference)
39 val referred = param.referred
40 val field = createALSFieldDeclaration => [
41 it.name = support.toID(f.getName)
42 it.multiplicity = ALSMultiplicity.ONE
43 it.type = base.transformTypeReference(f.range,trace)
44 ]
45 val host = base.typeMapper.transformTypeReference(referred,base,trace).get(0)
46 (host.eContainer as ALSSignatureBody).fields += field
47 trace.functionDeclaration2HostedField.put(f, field)
48 }
49 def protected transformFunctionToGlobalRelation(FunctionDeclaration f, Logic2AlloyLanguageMapperTrace trace) {
50 val field = createALSFieldDeclaration => [
51 it.name = support.toID(f.name)
52 it.multiplicity = ALSMultiplicity.SET
53 it.type = createALSDirectProduct => [
54 it.leftOperand = support.unfoldReferenceDirectProduct(base,f.parameters,trace)
55 it.rightMultiplicit = ALSMultiplicity.ONE
56 it.rightOperand = base.transformTypeReference(f.range,trace)
57 ]
58 ]
59 trace.logicLanguageBody.fields += field
60 trace.functionDeclaration2LanguageField.put(f, field)
61 }
62
63 def protected dispatch transformFunction(FunctionDefinition f, Logic2AlloyLanguageMapperTrace trace) {
64 val res = createALSFunctionDefinition => [
65 name = support.toID(f.name)
66 // variables + specification later
67 ]
68 trace.specification.functionDefinitions+=res;
69 trace.functionDefinition2Function.put(f,res)
70 }
71
72 def protected transformFunctionDefinitionSpecification(FunctionDefinition f, Logic2AlloyLanguageMapperTrace trace) {
73 val target = f.lookup(trace.functionDefinition2Function)
74 val variableMap = new HashMap
75 for(variable : f.variable) {
76 val v = createALSVariableDeclaration => [
77 it.name = support.toID(variable.name)
78 it.range = base.transformTypeReference(variable.range,trace)
79 // specification later
80 ]
81 target.variables+=v
82 variableMap.put(variable,v)
83 }
84 target.value = base.transformTerm(f.value,trace,variableMap)
85 }
86
87} \ No newline at end of file