From 615b602f0a9b4ce9eca8c38b9aa780b81d03d8e7 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 6 Feb 2019 18:28:18 +0100 Subject: Extract component fault tree model --- .../faulttree/components/CftLanguage.xtext | 75 ++++++++++++++-------- .../components/CftLanguageRuntimeModule.xtend | 4 ++ .../faulttree/components/GenerateCftLanguage.mwe2 | 2 + .../CftLanguageValueConverterService.xtend | 15 +++++ .../conversion/OF_INTValueConverter.xtend | 35 ++++++++++ .../naming/CftLanguageQualifiedNameProvider.xtend | 2 +- .../scoping/CftLanguageScopeProvider.xtend | 2 +- 7 files changed, 105 insertions(+), 30 deletions(-) create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/CftLanguageValueConverterService.xtend create mode 100644 Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/OF_INTValueConverter.xtend (limited to 'Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit') diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext index 3d82413f..61ab3359 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguage.xtext @@ -2,7 +2,8 @@ grammar hu.bme.mit.inf.dslreasoner.faulttree.components.CftLanguage with org.ecl import "http://www.eclipse.org/emf/2002/Ecore" as ecore import "http://www.eclipse.org/viatra/query/patternlanguage/emf/PatternLanguage" as vql - +import "http://www.bme.hu/mit/inf/dslreasoner/faulttree/model/ft" as ft +import "http://www.bme.hu/mit/inf/dslreasoner/faulttree/model/cft" as cft generate cftLanguage "http://www.bme.hu/mit/inf/dslreasoner/faulttree/components/CftLanguage" CftModel: @@ -13,35 +14,44 @@ CftModel: ImportDeclaration: "import" importedNamespace=QualifiedNameWithWildcard ";"?; -ComponentDefinition: - "cft" name=ID "{" - (("in" inputEvents+=InputEvent* ";")? & ("out" outputEvents+=[EventDeclaration]* ";")?) +ComponentDefinition returns cft::ComponentDefinition: + "cft" name=ValidId "{" + (("in" inputEvents+=InputEvent* ";")? & ("out" outputEvents+=[cft::EventDeclaration|ValidId]* ";")?) (eventDefinitions+=EventDefinition ";")* "}"; -EventDeclaration: - InputEvent | EventDefinition; - -InputEvent: - name=ID multiple?="[]"?; +InputEvent returns cft::IntputEvent: + name=ValidId multiple?="[]"?; -EventDefinition: +EventDefinition returns cft::EventDefinition: BasicEventDefinition | GateDefinition; -BasicEventDefinition: - name=ID "lambda" "=" rate=DOULBE; +BasicEventDefinition returns cft::BasicEventDefinition: + name=ValidId distribution=Distribution; + +Distribution returns ft::Distribution: + ConstantDistribution | ExponentialDistribution; + +ConstantDistribution returns ft::ConstantDistribution: + "p" "=" p=Double; + +ExponentialDistribution returns ft::ExponentialDistribution: + "lambda" "=" lambda=Double; -GateDefinition: - AndGate | OrGate; +GateDefinition returns cft::GateDefinition: + AndGateDefinition | OrGateDefinition | KOfMGateDefinition; -AndGate: - name=ID "and" inputEvents+=[EventDeclaration]*; +AndGateDefinition returns cft::AndGateDefinition: + name=ValidId "and" inputEvents+=[cft::EventDeclaration|ValidId]*; -OrGate: - name=ID "or" inputEvents+=[EventDeclaration]*; +OrGateDefinition returns cft::OrGateDefinition: + name=ValidId "or" inputEvents+=[cft::EventDeclaration|ValidId]*; + +KOfMGateDefinition returns cft::KOfMGateDefinition: + name=ValidId k=INT ("of" m=INT | m=OF_INT) inputEvents+=[cft::EventDeclaration|ValidId]*; TransformationDefinition: - "transformation" name=ID "{" + "transformation" name=ValidId "{" mappingDefinitions+=MappingDefinition* "}"; @@ -49,16 +59,16 @@ MappingDefinition: topLevel?="toplevel"? "mapping" pattern=[vql::Pattern|QualifiedName] "(" parameters+=MappingParameter ("," parameters+=MappingParameter)* ")" (componentInstance=ComponentInstance)? ("{" - ((lookupDefinitions+=LookupDefinition | assignments+=Assignment) ";")* + ((lookupDefinitions+=LookupDefinition | assignments+=Assignment) ";")* "}")?; MappingParameter: - name=ID; + name=ValidId; LookupDefinition: - "lookup" mapping=[MappingDefinition] - "(" arguments+=[MappingParameter] ("," arguments+=[MappingParameter])* ")" - "as" name=ID; + "lookup" mapping=[MappingDefinition|QualifiedName] + "(" arguments+=[MappingParameter|ValidId] ("," arguments+=[MappingParameter|ValidId])* ")" + "as" name=ValidId; Variable: ComponentInstance | LookupDefinition; @@ -67,16 +77,25 @@ Assignment: input=EventReference (multiple?="+=" | ":=") output=EventReference; EventReference: - component=[Variable] "." event=[EventDeclaration]; + component=[Variable|ValidId] "." event=[cft::EventDeclaration|ValidId]; ComponentInstance: - "=>" componentType=[ComponentDefinition|QualifiedName] name=ID?; + "=>" componentType=[cft::ComponentDefinition|QualifiedName] name=ID?; QualifiedName returns ecore::EString: - ID ("." ID)*; + ValidId ("." ValidId)*; QualifiedNameWithWildcard returns ecore::EString: QualifiedName ("." "*")?; -terminal DOULBE returns ecore::EDouble: +ValidId: + ID | OF_INT; + +Double returns ecore::EDouble: + INT | T_DOUBLE; + +terminal OF_INT returns ecore::EInt: + "o" "f" ('0'..'9')+; + +terminal T_DOUBLE: ('0'..'9')+ ("." ('0'..'9')+ | ("." ('0'..'9')+)? ("e" | "E") ("+" | "-")? ('0'..'9')+); diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguageRuntimeModule.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguageRuntimeModule.xtend index f780591d..fe5965fa 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguageRuntimeModule.xtend +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/CftLanguageRuntimeModule.xtend @@ -5,6 +5,7 @@ package hu.bme.mit.inf.dslreasoner.faulttree.components import com.google.inject.Binder import com.google.inject.name.Names +import hu.bme.mit.inf.dslreasoner.faulttree.components.conversion.CftLanguageValueConverterService import hu.bme.mit.inf.dslreasoner.faulttree.components.naming.CftLanguageQualifiedNameProvider import hu.bme.mit.inf.dslreasoner.faulttree.components.scoping.CftLanguageImportedNamespaceAwareLocalScopeProvider import org.eclipse.xtext.scoping.IScopeProvider @@ -30,4 +31,7 @@ class CftLanguageRuntimeModule extends AbstractCftLanguageRuntimeModule { CftLanguageQualifiedNameProvider } + override bindIValueConverterService() { + CftLanguageValueConverterService + } } diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/GenerateCftLanguage.mwe2 b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/GenerateCftLanguage.mwe2 index fa383404..89efbb05 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/GenerateCftLanguage.mwe2 +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/GenerateCftLanguage.mwe2 @@ -29,6 +29,8 @@ Workflow { referencedResource = "platform:/resource/org.eclipse.emf.ecore/model/Ecore.genmodel" referencedResource = "platform:/resource/org.eclipse.viatra.query.patternlanguage.emf/model/PatternLanguage.genmodel" + referencedResource = "platform:/resource/hu.bme.mit.inf.dslreasoner.faulttree.model/model/ft.genmodel" + referencedResource = "platform:/resource/hu.bme.mit.inf.dslreasoner.faulttree.model/model/cft.genmodel" serializer = { generateStub = false diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/CftLanguageValueConverterService.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/CftLanguageValueConverterService.xtend new file mode 100644 index 00000000..974e0df4 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/CftLanguageValueConverterService.xtend @@ -0,0 +1,15 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.components.conversion + +import com.google.inject.Inject +import org.eclipse.xtext.common.services.DefaultTerminalConverters +import org.eclipse.xtext.conversion.IValueConverter +import org.eclipse.xtext.conversion.ValueConverter + +class CftLanguageValueConverterService extends DefaultTerminalConverters { + @Inject OF_INTValueConverter ofIntValueConverter + + @ValueConverter(rule="OF_INT") + def IValueConverter OF_INT() { + ofIntValueConverter + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/OF_INTValueConverter.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/OF_INTValueConverter.xtend new file mode 100644 index 00000000..ba3d39e6 --- /dev/null +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/conversion/OF_INTValueConverter.xtend @@ -0,0 +1,35 @@ +package hu.bme.mit.inf.dslreasoner.faulttree.components.conversion + +import org.eclipse.xtext.conversion.ValueConverterException +import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter +import org.eclipse.xtext.nodemodel.INode + +class OF_INTValueConverter extends AbstractLexerBasedConverter { + static val PREFIX = "of" + + override toValue(String string, INode node) throws ValueConverterException { + if (string === null) { + return null + } + if (string.length < PREFIX.length || string.substring(0, PREFIX.length) != PREFIX) { + throw new ValueConverterException("'" + string + "' must start with the characters 'of'.", node, null); + } + try { + val intValue = Integer.parseInt(string.substring(PREFIX.length), 10) + Integer.valueOf(intValue) + } catch (NumberFormatException e) { + throw new ValueConverterException("Couldn't convert '" + string + "' to an int value.", node, e); + } + } + + override protected toEscapedString(Integer value) { + PREFIX + value + } + + override protected assertValidValue(Integer value) { + super.assertValidValue(value) + if (value < 0) { + throw new ValueConverterException(getRuleName() + " may not be negative.", null, null); + } + } +} diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/naming/CftLanguageQualifiedNameProvider.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/naming/CftLanguageQualifiedNameProvider.xtend index eb96901c..db89ebf9 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/naming/CftLanguageQualifiedNameProvider.xtend +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/naming/CftLanguageQualifiedNameProvider.xtend @@ -1,8 +1,8 @@ package hu.bme.mit.inf.dslreasoner.faulttree.components.naming import com.google.inject.Inject -import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ComponentDefinition import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition import org.eclipse.emf.ecore.EObject import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider diff --git a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/scoping/CftLanguageScopeProvider.xtend b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/scoping/CftLanguageScopeProvider.xtend index ab708087..e95d8c91 100644 --- a/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/scoping/CftLanguageScopeProvider.xtend +++ b/Stochastic/hu.bme.mit.inf.dslreasoner.faulttree.components/src/hu/bme/mit/inf/dslreasoner/faulttree/components/scoping/CftLanguageScopeProvider.xtend @@ -5,13 +5,13 @@ package hu.bme.mit.inf.dslreasoner.faulttree.components.scoping import com.google.common.collect.Lists import com.google.inject.Inject -import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ComponentDefinition import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.ComponentInstance import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.EventReference import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.LookupDefinition import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.MappingDefinition import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.TransformationDefinition import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.Variable +import hu.bme.mit.inf.dslreasoner.faulttree.model.cft.ComponentDefinition import org.eclipse.emf.common.notify.Notifier import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference -- cgit v1.2.3-70-g09d2