aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
diff options
context:
space:
mode:
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext391
1 files changed, 264 insertions, 127 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
index 6af31723..537989f7 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
@@ -5,177 +5,314 @@ import "http://www.eclipse.org/viatra/query/patternlanguage/emf/PatternLanguage"
5generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration" 5generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration"
6 6
7ConfigurationScript: 7ConfigurationScript:
8 (imports += Import)* 8 (imports+=Import)*
9 (commands += Command)* 9 (commands+=Command)*;
10;
11 10
12Command : 11Command:
13 Declaration | Task 12 Declaration | Task;
14;
15 13
16QualifiedName returns ecore::EString: 14QualifiedName returns ecore::EString:
17 ID ('.' ID)*; 15 ID ('.' ID)*;
18REALLiteral returns ecore::EBigDecimal: '-'? INT '.' INT; 16
19INTLiteral returns ecore::EInt: '-'? INT; 17REALLiteral returns ecore::EBigDecimal:
18 '-'? INT '.' INT;
19
20INTLiteral returns ecore::EInt:
21 '-'? INT;
20 22
21/////////////////////////////////////////////////// 23///////////////////////////////////////////////////
22// Imports 24// Imports
23/////////////////////////////////////////////////// 25///////////////////////////////////////////////////
26Import:
27 EPackageImport | ViatraImport;
24 28
25Import: EPackageImport | ViatraImport; 29EPackageImport:
30 "import" "epackage" importedPackage=[ecore::EPackage|STRING];
26 31
27EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING]; 32ViatraImport:
28ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING]; 33 "import" "viatra" importedViatra=[viatra::PatternModel|STRING];
29 34
30/////////////////////////////////////////////////// 35///////////////////////////////////////////////////
31// Declaration 36// Declaration
32/////////////////////////////////////////////////// 37///////////////////////////////////////////////////
33 38Declaration:
34Declaration :
35 FileDeclaration 39 FileDeclaration
36 | MetamodelDeclaration 40 | MetamodelDeclaration
37 | PartialModelDeclaration 41 | PartialModelDeclaration
38 | GraphPatternDeclaration 42 | GraphPatternDeclaration
39 | ConfigDeclaration 43 | ConfigDeclaration
40 | ScopeDeclaration 44 | ScopeDeclaration
41; 45 | ObjectiveDeclaration;
42 46
43/////////////////////////////////////////////////// 47///////////////////////////////////////////////////
44// Files and Folders 48// Files and Folders
45/////////////////////////////////////////////////// 49///////////////////////////////////////////////////
50FileSpecification:
51 path=STRING;
52
53FileDeclaration:
54 'file' name=ID '=' specification=FileSpecification;
46 55
47FileSpecification: path = STRING; 56FileReference:
48FileDeclaration: 'file' name = ID '=' specification = FileSpecification; 57 referred=[FileDeclaration];
49FileReference: referred = [FileDeclaration]; 58
50File: FileSpecification | FileReference; 59File:
60 FileSpecification | FileReference;
51 61
52/////////////////////////////////////////////////// 62///////////////////////////////////////////////////
53// Metamodel 63// Metamodel
54/////////////////////////////////////////////////// 64///////////////////////////////////////////////////
65MetamodelSpecification:
66 '{' (entries+=MetamodelEntry) (',' entries+=MetamodelEntry)* '}';
67
68MetamodelEntry:
69 MetamodelElement | AllPackageEntry;
70
71AllPackageEntry:
72 "package" package=[ecore::EPackage|QualifiedName] ("excluding" '{' exclusion+=MetamodelElement (','
73 exclusion+=MetamodelElement)* '}')?;
74
75MetamodelElement:
76 (package=[ecore::EPackage|QualifiedName] '::')? classifier=[ecore::EClassifier] ('.'
77 feature=[ecore::ENamedElement])?;
55 78
56MetamodelSpecification: '{' (entries += MetamodelEntry) (',' entries += MetamodelEntry)* '}'; 79MetamodelDeclaration:
57MetamodelEntry: MetamodelElement | AllPackageEntry; 80 'metamodel' name=ID specification=MetamodelSpecification;
58AllPackageEntry: "package" package=[ecore::EPackage|QualifiedName] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?;
59MetamodelElement: (package=[ecore::EPackage|QualifiedName] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?;
60 81
61MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification; 82MetamodelReference:
62MetamodelReference: referred = [MetamodelDeclaration]; 83 referred=[MetamodelDeclaration];
63Metamodel: MetamodelReference | MetamodelSpecification; 84
85Metamodel:
86 MetamodelReference | MetamodelSpecification;
64 87
65/////////////////////////////////////////////////// 88///////////////////////////////////////////////////
66// Partial Model 89// Partial Model
67/////////////////////////////////////////////////// 90///////////////////////////////////////////////////
91PartialModelSpecification:
92 '{' entry+=PartialModelEntry (',' entry+=PartialModelEntry)? '}';
93
94PartialModelEntry:
95 ModelEntry | FolderEntry;
96
97ModelEntry:
98 path=File;
99
100FolderEntry:
101 "folder" path=File ("excluding" "{" exclusion+=ModelEntry ("," exclusion+=ModelEntry)* "}")?;
102
103PartialModelDeclaration:
104 'models' name=ID specification=PartialModelSpecification;
68 105
69PartialModelSpecification: '{' entry += PartialModelEntry (',' entry += PartialModelEntry)? '}'; 106PartialModelReference:
70PartialModelEntry: ModelEntry | FolderEntry; 107 referred=[PartialModelDeclaration];
71ModelEntry: path = File;
72FolderEntry: "folder" path = File ("excluding" "{" exclusion += ModelEntry ("," exclusion += ModelEntry)* "}")?;
73 108
74PartialModelDeclaration: 'models' name = ID specification = PartialModelSpecification; 109PartialModel:
75PartialModelReference : referred = [PartialModelDeclaration]; 110 PartialModelSpecification | PartialModelReference;
76PartialModel: PartialModelSpecification | PartialModelReference;
77 111
78/////////////////////////////////////////////////// 112///////////////////////////////////////////////////
79// Patterns 113// Patterns
80/////////////////////////////////////////////////// 114///////////////////////////////////////////////////
115PatternSpecification:
116 '{' entries+=PatternEntry (',' entries+=PatternEntry)* '}';
117
118PatternEntry:
119 PatternElement | AllPatternEntry;
120
121AllPatternEntry:
122 'package' package=[viatra::PatternModel|QualifiedName] ('excluding' '{' exclusuion+=PatternElement (','
123 exclusuion+=PatternElement)* '}')?;
124
125PatternElement:
126 (package=[viatra::PatternModel|QualifiedName] '::')? pattern=[viatra::Pattern];
127
128GraphPatternDeclaration:
129 'constraints' name=ID specification=PatternSpecification;
130
131GraphPatternReference:
132 referred=[GraphPatternDeclaration];
133
134GraphPattern:
135 GraphPatternReference | PatternSpecification;
136
137///////////////////////////////////////////////////
138// Objectives
139///////////////////////////////////////////////////
140ObjectiveSpecification:
141 '{' entries+=ObjectiveEntry (',' entries+=ObjectiveEntry)* '}';
142
143ObjectiveEntry:
144 OptimizationEntry | ThresholdEntry;
145
146enum OptimizationDirection:
147 MINIMIZE='minimize' | MAXIMIZE='maximize';
148
149OptimizationEntry:
150 direction=OptimizationDirection function=ObjectiveFunction;
151
152enum ComparisonOperator:
153 LESS='<' | GREATER='>' | LESS_EQUALS='<=' | GREATER_EQUALS='>=';
81 154
82PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}'; 155ThresholdEntry:
83PatternEntry: PatternElement | AllPatternEntry; 156 function=ObjectiveFunction operator=ComparisonOperator threshold=REALLiteral;
84AllPatternEntry: 'package' package = [viatra::PatternModel|QualifiedName] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?;
85PatternElement: (package =[viatra::PatternModel|QualifiedName] '::')? pattern = [viatra::Pattern];
86 157
87GraphPatternDeclaration: 'constraints' name = ID specification = PatternSpecification; 158ObjectiveFunction:
88GraphPatternReference: referred = [GraphPatternDeclaration]; 159 CostObjectiveFunction;
89GraphPattern: GraphPatternReference|PatternSpecification; 160
161CostObjectiveFunction:
162 'cost' '{' entries+=CostEntry (',' entries+=CostEntry)* '}';
163
164CostEntry:
165 patternElement=PatternElement '=' weight=INTLiteral;
166
167ObjectiveDeclaration:
168 'objectives' name=ID specification=ObjectiveSpecification;
169
170ObjectiveReference:
171 referred=[ObjectiveDeclaration];
172
173Objective:
174 ObjectiveReference | ObjectiveSpecification;
90 175
91/////////////////////////////////////////////////// 176///////////////////////////////////////////////////
92// SolverConfig 177// SolverConfig
93/////////////////////////////////////////////////// 178///////////////////////////////////////////////////
179ConfigSpecification:
180 {ConfigSpecification} '{'
181 (entries+=ConfigEntry ("," entries+=ConfigEntry)*)?
182 '}';
183
184ConfigDeclaration:
185 'config' name=ID specification=ConfigSpecification;
186
187ConfigEntry:
188 DocumentationEntry | RuntimeEntry | MemoryEntry | CustomEntry;
189
190DocumentationEntry:
191 "log-level" '=' level=DocumentLevelSpecification;
94 192
95ConfigSpecification: {ConfigSpecification}'{' 193enum DocumentLevelSpecification:
96 (entries += ConfigEntry ("," entries += ConfigEntry)*)? 194 none | normal | full;
195
196RuntimeEntry:
197 "runtime" "=" millisecLimit=INT;
198
199MemoryEntry:
200 "memory" "=" megabyteLimit=INT;
201
202CustomEntry:
203 key=STRING "=" value=STRING;
204
205ConfigReference:
206 config=[ConfigDeclaration];
207
208Config:
209 ConfigSpecification | ConfigReference;
210
211enum Solver:
212 SMTSolver | AlloySolver | ViatraSolver;
213
214ScopeSpecification:
215 {ScopeSpecification} '{'
216 (scopes+=TypeScope (',' scopes+=TypeScope)*)?
97 '}'; 217 '}';
98ConfigDeclaration : 218
99 'config' name = ID specification = ConfigSpecification 219TypeScope:
100; 220 ClassTypeScope | ObjectTypeScope | IntegerTypeScope | RealTypeScope | StringTypeScope;
101ConfigEntry: DocumentationEntry | RuntimeEntry | MemoryEntry | CustomEntry; 221
102DocumentationEntry: "log-level" '=' level = DocumentLevelSpecification; enum DocumentLevelSpecification: none | normal | full; 222ClassTypeScope:
103RuntimeEntry: "runtime" "=" millisecLimit = INT; 223 '#' type=ClassReference
104MemoryEntry: "memory" "=" megabyteLimit = INT; 224 (setsNew?='+=' | setsSum?='=')
105CustomEntry: key = STRING "=" value = STRING; 225 (number=ExactNumber | number=IntervallNumber);
106 226
107ConfigReference: config = [ConfigDeclaration]; 227ObjectTypeScope:
108Config: ConfigSpecification | ConfigReference; 228 '#' type=ObjectReference
109 229 (setsNew?='+=' | setsSum?='=')
110enum Solver: SMTSolver | AlloySolver | ViatraSolver; 230 (number=ExactNumber | number=IntervallNumber);
111 231
112ScopeSpecification: {ScopeSpecification} '{' 232IntegerTypeScope:
113 (scopes += TypeScope (',' scopes += TypeScope)*)? 233 '#' type=IntegerReference
114'}'; 234 (setsNew?='+=' | setsSum?='=')
115TypeScope: ClassTypeScope | ObjectTypeScope | IntegerTypeScope | RealTypeScope | StringTypeScope; 235 (number=ExactNumber | number=IntervallNumber | number=IntEnumberation);
116ClassTypeScope: '#' type = ClassReference 236
117 (setsNew ?='+=' | setsSum ?= '=') 237RealTypeScope:
118 (number = ExactNumber | number = IntervallNumber) 238 '#' type=RealReference
119; 239 (setsNew?='+=' | setsSum?='=')
120ObjectTypeScope: '#' type = ObjectReference 240 (number=ExactNumber | number=IntervallNumber | number=RealEnumeration);
121 (setsNew ?='+=' | setsSum ?= '=') 241
122 (number = ExactNumber | number = IntervallNumber) 242StringTypeScope:
123; 243 '#' type=StringReference
124IntegerTypeScope: '#' type = IntegerReference 244 (setsNew?='+=' | setsSum?='=')
125 (setsNew ?='+=' | setsSum ?= '=') 245 (number=ExactNumber | number=IntervallNumber | number=StringEnumeration);
126 (number = ExactNumber | number = IntervallNumber | number = IntEnumberation) 246
127; 247TypeReference:
128RealTypeScope: '#' type = RealReference 248 ClassReference | ObjectReference | IntegerReference | RealReference | StringReference;
129 (setsNew ?='+=' | setsSum ?= '=') 249
130 (number = ExactNumber | number = IntervallNumber | number = RealEnumeration) 250ClassReference:
131; 251 '<' element=MetamodelElement '>';
132StringTypeScope: '#' type = StringReference 252
133 (setsNew ?='+=' | setsSum ?= '=') 253ObjectReference:
134 (number = ExactNumber | number = IntervallNumber | number = StringEnumeration) 254 {ObjectReference} 'node';
135; 255
136 256IntegerReference:
137TypeReference: ClassReference | ObjectReference | IntegerReference | RealReference | StringReference; 257 {IntegerScope} 'int';
138ClassReference: '<' element = MetamodelElement '>'; 258
139ObjectReference: {ObjectReference} 'node'; 259RealReference:
140IntegerReference: {IntegerScope} 'int'; 260 {RealScope} 'real';
141RealReference: {RealScope} 'real'; 261
142StringReference: {StringScope} 'string'; 262StringReference:
143 263 {StringScope} 'string';
144NumberSpecification: ExactNumber | IntervallNumber | IntEnumberation | RealEnumeration | StringEnumeration; 264
145ExactNumber: exactNumber = INT | exactUnlimited ?= '*'; 265NumberSpecification:
146IntervallNumber: min = INT '..' (maxNumber = INT | maxUnlimited ?= '*'); 266 ExactNumber | IntervallNumber | IntEnumberation | RealEnumeration | StringEnumeration;
147IntEnumberation: {IntEnumberation} '{' (entry += INTLiteral (',' entry += INTLiteral)*)?'}'; 267
148RealEnumeration: {RealEnumeration} '{' (entry += REALLiteral (',' entry += REALLiteral)*)?'}'; 268ExactNumber:
149StringEnumeration: {StringEnumeration} '{' (entry += STRING (',' entry += STRING)*)?'}'; 269 exactNumber=INT | exactUnlimited?='*';
150 270
151ScopeDeclaration: 'scope' name = ID specification = ScopeSpecification; 271IntervallNumber:
152ScopeReference: referred = [ScopeDeclaration]; 272 min=INT '..' (maxNumber=INT | maxUnlimited?='*');
153Scope: ScopeSpecification | ScopeReference; 273
154 274IntEnumberation:
155Task: GenerationTask /*| CoverageCalculation | ValidationTask*/; 275 {IntEnumberation} '{' (entry+=INTLiteral (',' entry+=INTLiteral)*)? '}';
156 276
157GenerationTask: 'generate' {GenerationTask} '{'( 277RealEnumeration:
158 278 {RealEnumeration} '{' (entry+=REALLiteral (',' entry+=REALLiteral)*)? '}';
159 // domain 279
160 ('metamodel' '=' metamodel = Metamodel)? & 280StringEnumeration:
161 ('partial-model' '=' partialModel = PartialModel)? & 281 {StringEnumeration} '{' (entry+=STRING (',' entry+=STRING)*)? '}';
162 ('constraints' '=' patterns = GraphPattern)? & 282
163 283ScopeDeclaration:
164 // model set 284 'scope' name=ID specification=ScopeSpecification;
165 ('scope' '=' scope = Scope)? & 285
166 (numberSpecified ?= 'number' '=' number= INT)? & 286ScopeReference:
167 (runSpecified ?= 'runs' '=' runs = INT)? & 287 referred=[ScopeDeclaration];
168 // Solver 288
169 ('solver' '=' solver = Solver)? & 289Scope:
170 ('config' '=' config = Config)? & 290 ScopeSpecification | ScopeReference;
171 291
172 // output texts 292Task:
173 ('debug' '=' debugFolder = File)? & 293 GenerationTask /*| CoverageCalculation | ValidationTask*/;
174 ('log' '=' targetLogFile = File)? & 294
175 ('statistics' '=' targetStatisticsFile = File)? & 295GenerationTask:
176 296 'generate' {GenerationTask} '{' (
177 // output models 297
178 ('output' '=' tagetFolder = File)? 298 // domain
179 299 ('metamodel' '=' metamodel=Metamodel)? &
180 )'}' 300 ('partial-model' '=' partialModel=PartialModel)? &
181; \ No newline at end of file 301 ('constraints' '=' patterns=GraphPattern)? &
302 ('objectives' '=' objectives=Objective)? &
303
304 // model set
305 ('scope' '=' scope=Scope)? &
306 (numberSpecified?='number' '=' number=INT)? &
307 (runSpecified?='runs' '=' runs=INT)? &
308 // Solver
309 ('solver' '=' solver=Solver)? &
310 ('config' '=' config=Config)? &
311
312 // output texts
313 ('debug' '=' debugFolder=File)? &
314 ('log' '=' targetLogFile=File)? &
315 ('statistics' '=' targetStatisticsFile=File)? &
316
317 // output models
318 ('output' '=' tagetFolder=File)?) '}'; \ No newline at end of file