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/emf/PatternLanguage" as viatra generate applicationConfiguration "http://www.bme.hu/mit/inf/dslreasoner/application/ApplicationConfiguration" ConfigurationScript: (imports += Import)* (commands += Command)* ; Command : Declaration | Task ; QualifiedName returns ecore::EString: ID ('.' ID)*; REALLiteral returns ecore::EBigDecimal: '-'? INT '.' INT; INTLiteral returns ecore::EInt: '-'? INT; /////////////////////////////////////////////////// // Imports /////////////////////////////////////////////////// Import: EPackageImport | ViatraImport; EPackageImport: "import" "epackage" importedPackage=[ecore::EPackage|STRING]; ViatraImport: "import" "viatra" importedViatra=[viatra::PatternModel|STRING]; /////////////////////////////////////////////////// // Declaration /////////////////////////////////////////////////// Declaration : FileDeclaration | MetamodelDeclaration | PartialModelDeclaration | GraphPatternDeclaration | ConfigDeclaration | ScopeDeclaration ; /////////////////////////////////////////////////// // 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|QualifiedName] ("excluding" '{'exclusion +=MetamodelElement (',' exclusion +=MetamodelElement)*'}')?; MetamodelElement: (package=[ecore::EPackage|QualifiedName] '::')? classifier = [ecore::EClassifier] ('.' feature= [ecore::ENamedElement])?; MetamodelDeclaration: 'metamodel' name = ID specification = MetamodelSpecification; MetamodelReference: referred = [MetamodelDeclaration]; Metamodel: MetamodelReference | MetamodelSpecification; /////////////////////////////////////////////////// // Partial Model /////////////////////////////////////////////////// PartialModelSpecification: '{' entry += PartialModelEntry (',' entry += PartialModelEntry)? '}'; PartialModelEntry: ModelEntry | FolderEntry; ModelEntry: path = File; FolderEntry: "folder" path = File ("excluding" "{" exclusion += ModelEntry ("," exclusion += ModelEntry)* "}")?; PartialModelDeclaration: 'models' name = ID specification = PartialModelSpecification; PartialModelReference : referred = [PartialModelDeclaration]; PartialModel: PartialModelSpecification | PartialModelReference; /////////////////////////////////////////////////// // Patterns /////////////////////////////////////////////////// PatternSpecification: '{' entries += PatternEntry (',' entries += PatternEntry)* '}'; PatternEntry: PatternElement | AllPatternEntry; AllPatternEntry: 'package' package = [viatra::PatternModel|QualifiedName] ('excluding' '{' exclusuion += PatternElement (',' exclusuion += PatternElement)* '}')?; PatternElement: (package =[viatra::PatternModel|QualifiedName] '::')? pattern = [viatra::Pattern]; GraphPatternDeclaration: 'constraints' name = ID specification = PatternSpecification; GraphPatternReference: referred = [GraphPatternDeclaration]; GraphPattern: GraphPatternReference|PatternSpecification; /////////////////////////////////////////////////// // SolverConfig /////////////////////////////////////////////////// ConfigSpecification: {ConfigSpecification}'{' (entries += ConfigEntry ("," entries += ConfigEntry)*)? '}'; ConfigDeclaration : 'config' name = ID specification = ConfigSpecification ; ConfigEntry: DocumentationEntry | RuntimeEntry | MemoryEntry | CustomEntry; DocumentationEntry: "log-level" '=' level = DocumentLevelSpecification; enum DocumentLevelSpecification: none | normal | full; RuntimeEntry: "runtime" "=" millisecLimit = INT; MemoryEntry: "memory" "=" megabyteLimit = INT; CustomEntry: key = STRING "=" value = STRING; ConfigReference: config = [ConfigDeclaration]; Config: ConfigSpecification | ConfigReference; enum Solver: SMTSolver | AlloySolver | ViatraSolver; ScopeSpecification: {ScopeSpecification} '{' (scopes += TypeScope (',' scopes += TypeScope)*)? '}'; TypeScope: ClassTypeScope | ObjectTypeScope | IntegerTypeScope | RealTypeScope | StringTypeScope; ClassTypeScope: '#' type = ClassReference (setsNew ?='+=' | setsSum ?= '=') (number = ExactNumber | number = IntervallNumber) ; ObjectTypeScope: '#' type = ObjectReference (setsNew ?='+=' | setsSum ?= '=') (number = ExactNumber | number = IntervallNumber) ; IntegerTypeScope: '#' type = IntegerReference (setsNew ?='+=' | setsSum ?= '=') (number = ExactNumber | number = IntervallNumber | number = IntEnumberation) ; RealTypeScope: '#' type = RealReference (setsNew ?='+=' | setsSum ?= '=') (number = ExactNumber | number = IntervallNumber | number = RealEnumeration) ; StringTypeScope: '#' type = StringReference (setsNew ?='+=' | setsSum ?= '=') (number = ExactNumber | number = IntervallNumber | number = StringEnumeration) ; TypeReference: ClassReference | ObjectReference | IntegerReference | RealReference | StringReference; ClassReference: '<' element = MetamodelElement '>'; ObjectReference: {ObjectReference} 'node'; IntegerReference: {IntegerScope} 'int'; RealReference: {RealScope} 'real'; StringReference: {StringScope} 'string'; NumberSpecification: ExactNumber | IntervallNumber | IntEnumberation | RealEnumeration | StringEnumeration; ExactNumber: exactNumber = INT | exactUnlimited ?= '*'; IntervallNumber: min = INT '..' (maxNumber = INT | maxUnlimited ?= '*'); IntEnumberation: {IntEnumberation} '{' (entry += INTLiteral (',' entry += INTLiteral)*)?'}'; RealEnumeration: {RealEnumeration} '{' (entry += REALLiteral (',' entry += REALLiteral)*)?'}'; StringEnumeration: {StringEnumeration} '{' (entry += STRING (',' entry += STRING)*)?'}'; ScopeDeclaration: 'scope' name = ID specification = ScopeSpecification; ScopeReference: referred = [ScopeDeclaration]; Scope: ScopeSpecification | ScopeReference; Task: GenerationTask /*| CoverageCalculation | ValidationTask*/; GenerationTask: 'generate' {GenerationTask} '{'( // domain ('metamodel' '=' metamodel = Metamodel)? & ('partial-model' '=' partialModel = PartialModel)? & ('constraints' '=' patterns = GraphPattern)? & // model set ('scope' '=' scope = Scope)? & (numberSpecified ?= 'number' '=' number= INT)? & (runSpecified ?= 'runs' '=' runs = INT)? & // Solver ('solver' '=' solver = Solver)? & ('config' '=' config = Config)? & // output texts ('debug' '=' debugFolder = File)? & ('log' '=' targetLogFile = File)? & ('statistics' '=' targetStatisticsFile = File)? & // output models ('output' '=' tagetFolder = File)? )'}' ;