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