diff options
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.xtend | 87 |
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 @@ | |||
1 | package hu.bme.mit.inf.dlsreasoner.alloy.reasoner.builder | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.alloyLanguage.AlloyLanguageFactory | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference | ||
6 | import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSMultiplicity | ||
7 | import hu.bme.mit.inf.dslreasoner.alloyLanguage.ALSSignatureBody | ||
8 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDefinition | ||
9 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
10 | import java.util.HashMap | ||
11 | |||
12 | class 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 | ||