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