aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext
blob: ed83419f52f43322b3fac21c5242004fa53aa10d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
grammar hu.bme.mit.inf.dslreasoner.application.ApplicationConfiguration with org.eclipse.xtext.common.Terminals

import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "http://www.eclipse.org/viatra/query/patternlanguage/PatternLanguage" as viatra
generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration"

ConfigurationScript:
	(imports += Import)*
	(commands += Command)*
;

Command :
	Declaration
	//| Task
;
Declaration :
//	FileDeclaration | 
	MetamodelDeclaration
//	| PartialModelDeclaration
//	| GraphPatternDeclaration
//	| SolverConfig
;

///////////////////////////////////////////////////
// Imports
///////////////////////////////////////////////////

Import: EPackageImport | ViatraImport;

EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING];
ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING];

///////////////////////////////////////////////////
// Files and Folders
///////////////////////////////////////////////////
/*
FileSpecification: path = STRING;
FileDeclaration: 'file' name = ID '=' specification = FileSpecification;

FileReference: referred = [FileDeclaration];
File: FileSpecification | FileReference;
*/
///////////////////////////////////////////////////
// Metamodel
///////////////////////////////////////////////////

MetamodelSpecification: '{' (entries += MetamodelEntry) (',' entries += MetamodelEntry)* '}';
MetamodelEntry: MetamodelElement | AllPackageEntry;
AllPackageEntry: "package" package=[ecore::EPackage] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?;
MetamodelElement: (package=[ecore::EPackage] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?;

MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification;
MetamodelReference: referred = [MetamodelDeclaration];
Metamodel: MetamodelReference | MetamodelSpecification;

///////////////////////////////////////////////////
// Partial Model
///////////////////////////////////////////////////
/*
PartialModelEntry: path = File;
PartialModelSpecification: entry += PartialModelEntry ('+' entry += PartialModelEntry)*;
PartialModelDeclaration: 'partial-model' name = ID '=' specification = PartialModelSpecification;
PartialModelReference : referred = [PartialModelDeclaration];
PartialModel: PartialModelSpecification | PartialModelReference;
*/
///////////////////////////////////////////////////
// Patterns
///////////////////////////////////////////////////
/*
PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}';
PatternEntry: PatternElement | AllPatternEntry;
AllPatternEntry: package = [viatra::PatternModel] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?;
PatternElement: pattern = [viatra::Pattern];

GraphPatternDeclaration: 'patterns' name = ID specification = PatternSpecification;
GraphPatternReference: referred = [GraphPatternDeclaration];
GraphPattern: GraphPatternReference|PatternSpecification;
*/
///////////////////////////////////////////////////
// SolverConfig
///////////////////////////////////////////////////
/*
SolverConfig : SMTSolverConfig | AlloySolverConfig | ViatraSolverConfig;

SMTSolverConfig:
	'smt-solver-config' name = ID '{'
		'solver-path' '=' solverPath = File
	'}'
;

AlloySolverConfig:
	'alloy-solver-config' name = ID  '{'
		('symmetry' '=' symmetry=INT)?
	'}'
;

ViatraSolverConfig:
	'viatra-solver-config' name = ID '{'
		('statecoding' '=' statecoding = ViatraStatecoder)? &
		('type-inferencing' '=' typeinferencing = ViatraTypeInferencing)? &
		('backtrack-chance' '=' backtrackChance = INT)?
	'}'
;
enum ViatraStatecoder: neighbourhood | identifier;
enum ViatraTypeInferencing: preliminary | online;

Solver: SMTSolver | AlloySolver | ViatraSolver;

SMTSolver: 'smt-solver' '(' (config = [SMTSolverConfig]) ')';
AlloySolver: 'alloy-solver' {AlloySolver} '(' (config = [AlloySolverConfig]|'default') ')';
ViatraSolver: 'viatra-solver' {ViatraSolver} '(' (config= [ViatraSolverConfig]|'default')')';

Task: GenerationTask;

GenerationTask: 'generate' '{'
		('metamodel' '=' metamodel = Metamodel) &
		('partial-model'  '=' partialModel = PartialModel)? &
		('patterns'  '=' patterns = GraphPattern)? &
		('new-objects' '=' size = INT) &
		('number' '=' number= INT)? &
		('runs' '=' runs = INT)?
		'target-folder' '=' tagetFolder = File
		'debug-folder' '=' debugFolder = File
		('log' '=' targetLogFile = File)?
		('statistics' '=' targetStatisticsFile = File)?
	'}'
;*/