aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexerWithPreliminaryTypeAnalysis.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/TypeIndexerWithPreliminaryTypeAnalysis.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexerWithPreliminaryTypeAnalysis.xtend26
1 files changed, 15 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/TypeIndexerWithPreliminaryTypeAnalysis.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexerWithPreliminaryTypeAnalysis.xtend
index 7bdb9a5b..fde5f4b6 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexerWithPreliminaryTypeAnalysis.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeIndexerWithPreliminaryTypeAnalysis.xtend
@@ -4,10 +4,9 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
4import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 4import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
5import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality 5import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.Modality
6import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysisResult 6import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeAnalysisResult
7import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeRefinementPrecondition
7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
8import org.eclipse.emf.ecore.EClass 9import org.eclipse.emf.ecore.EClass
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.TypeRefinementPrecondition
10import java.util.Collections
11 10
12class TypeIndexerWithPreliminaryTypeAnalysis extends TypeIndexer{ 11class TypeIndexerWithPreliminaryTypeAnalysis extends TypeIndexer{
13 val PatternGenerator base; 12 val PatternGenerator base;
@@ -18,22 +17,26 @@ class TypeIndexerWithPreliminaryTypeAnalysis extends TypeIndexer{
18 override requiresTypeAnalysis() { true } 17 override requiresTypeAnalysis() { true }
19 18
20 override getRequiredQueries() ''' 19 override getRequiredQueries() '''
21 private pattern typeInterpretation(problem:LogicProblem, interpetation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { 20 private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
22 find interpretation(problem,interpetation); 21 find interpretation(problem,interpretation);
23 LogicProblem.types(problem,type); 22 LogicProblem.types(problem,type);
24 PartialInterpretation.partialtypeinterpratation(interpetation,typeInterpretation); 23 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); 24 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26 } 25 }
27 26
28 private pattern directInstanceOf(problem:LogicProblem, interpetation:PartialInterpretation, element:DefinedElement, type:Type) { 27 private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
29 find interpretation(problem,interpetation); 28 find interpretation(problem,interpretation);
30 LogicProblem.types(problem,type); 29 LogicProblem.types(problem,type);
31 TypeDefinition.elements(type,element); 30 TypeDefinition.elements(type,element);
32 } or { 31 } or {
33 find interpretation(problem,interpetation); 32 find interpretation(problem,interpretation);
34 find typeInterpretation(problem,interpetation,type,typeInterpretation); 33 find typeInterpretation(problem,interpretation,type,typeInterpretation);
35 PartialComplexTypeInterpretation.elements(typeInterpretation,element); 34 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
36 } 35 }
36
37 private pattern isPrimitive(element: PrimitiveElement) {
38 PrimitiveElement(element);
39 }
37 ''' 40 '''
38 41
39 override generateInstanceOfQueries(LogicProblem problem, PartialInterpretation emptySolution, TypeAnalysisResult typeAnalysisResult) { 42 override generateInstanceOfQueries(LogicProblem problem, PartialInterpretation emptySolution, TypeAnalysisResult typeAnalysisResult) {
@@ -73,15 +76,16 @@ class TypeIndexerWithPreliminaryTypeAnalysis extends TypeIndexer{
73 * An element may be an instance of type "«type.name»". 76 * An element may be an instance of type "«type.name»".
74 */ 77 */
75 private pattern «patternName(type,Modality.MAY)»(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) 78 private pattern «patternName(type,Modality.MAY)»(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
76 «IF inhibitorTypes != null»{ 79 «IF inhibitorTypes !== null»{
77 find interpretation(problem,interpretation); 80 find interpretation(problem,interpretation);
78 PartialInterpretation.newElements(interpretation,element); 81 PartialInterpretation.newElements(interpretation,element);
79 «FOR inhibitorType : inhibitorTypes» 82 «FOR inhibitorType : inhibitorTypes»
80 neg «referInstanceOf(inhibitorType,Modality.MUST,"element")» 83 neg «referInstanceOf(inhibitorType,Modality.MUST,"element")»
81 «ENDFOR» 84 «ENDFOR»
85 neg find isPrimitive(element);
82 } or { 86 } or {
83 find interpretation(problem,interpretation); 87 find interpretation(problem,interpretation);
84 PartialInterpretation.openWorldElements(interpetation,element); 88 PartialInterpretation.openWorldElements(interpretation,element);
85 } or 89 } or
86 «ENDIF» 90 «ENDIF»
87 { «referInstanceOf(type,Modality.MUST,"element")» } 91 { «referInstanceOf(type,Modality.MUST,"element")» }