TOKEN : { < FORFAMEL: "Forfamel" > | < KOALISH: "Koalish" > | < KUMBANG: "Kumbang" > | < MODEL: "model" > | < ROOT: "root" > | < ROOTSYMBOL: "$" > | < TYPE: "type" > | < ABSTRACT: "abstract" > | < FEATURE: "feature" > | < ATTRIBUTE: "attribute" > | < INTERFACE: "interface" > | < COMPONENT: "component" > | < SUBFEATURES: "subfeatures" > | < ATTRIBUTES: "attributes" > | < PROVIDES: "provides" > | < REQUIRES: "requires" > | < CONTAINS: "contains" > | < CONNECTS: "connects" > | < OPTIONAL: "optional" > | < GROUNDED: "grounded" > | < CONSTRAINTS: "constraints" > | < IMPLEMENTATION: "implementation" > | < PRESENT: "present" > | < CARDINALITY: "cardinality" > | < INSTANCEOF: "instance_of" > | < HASINSTANCES: "has_instances" > | < HASPART_OFTYPE: "has_part_of_type" > | < CONNECTED: "connected" > | < CONNECTED_TO: "connected_to" > | < EXTENDS: "extends" > | < VALUE: "value" > | < HIDDEN: "hidden" > | < NONE: "none" > | < SAME: "same" > | < DIFFERENT: "different" > | < LBRACE: "{" > | < LPAREN: "(" > | < LBRACKET: "[" > | < RBRACKET: "]" > | < RPAREN: ")" > | < RBRACE: "}" > | < SEMICOLON: ";" > | < COMMA: "," > | < EQUIVALENT: "<=>" > | < IMPLIES: "=>" > | < EQUALS: "=" > | < AND: "and" > | < OR: "or" > | < NE: "!=" > | < LT: "<" > | < GT: ">" > | < LTE: "<=" > | < GTE: ">=" > | < MINUS: "-" > | < PLUS: "+" > | < DIV: "/" > | < MOD: "mod" > | < DOT: "." > | < ASTERISK: "*" > | < QUESTION_MARK: "?" > | < INTEGER_LITERAL: ["0"-"9"](["0"-"9"])* > | < NOT: "not" > | < FORALL: "for_all" > | < EXISTS: "exists" > | < COLON: ":" > | < ATTR: "@" > | < ARROW: "->" > | < STRING_LITERAL: "\"" (~["\"", "\n", "\r"])* ("\"" | "\n" | "\r") > | < IDENTIFIER: (["a"-"z"]|["A"-"Z"]|["0"-"9"]|["_"])+ > } void SyntaxModel(): {} { SyntaxModelKind() ( (|) )+ (SyntaxTypeDefinition())* } void SyntaxModelKind(): {} { | | } void SyntaxTypeDefinition(): {} { SyntaxAttributeTypeDefinition() | SyntaxInterfaceTypeDefinition() | SyntaxComposableTypeDefinition() } void SyntaxComposableTypeDefinition(): {} { [] (|) SyntaxDisplayIdentifier() [ SyntaxIdentifierList()] (SyntaxSection())* } void SyntaxAttributeTypeDefinition(): {} { SyntaxDisplayIdentifier() SyntaxValueEnumeration() } void SyntaxInterfaceTypeDefinition(): {} { SyntaxDisplayIdentifier() ( )* } void SyntaxSection(): {} { SyntaxSubfeatureSection() | SyntaxAttributeSection() | SyntaxProvideSection() | SyntaxRequireSection() | SyntaxConstraintSection() | SyntaxContainSection() | SyntaxConnectSection() | SyntaxImplementationSection() } void SyntaxSubfeatureSection(): {} { (SyntaxPartSpecification())* } void SyntaxAttributeSection(): {} { (SyntaxAttribute())* } void SyntaxProvideSection(): {} { (SyntaxInterface())* } void SyntaxRequireSection(): {} { (SyntaxInterface())* } void SyntaxInterface(): {} { SyntaxIdentifierList() SyntaxInterfaceSpecification() ( SyntaxInterfaceSpecification())* } void SyntaxInterfaceSpecification(): {} { SyntaxDisplayIdentifier() [ ( | ) [ ( | )] ] } void SyntaxConstraintSection(): {} { (SyntaxConstraint())* } void SyntaxContainSection(): {} { (SyntaxPartSpecification())* } void SyntaxImplementationSection(): {} { (SyntaxConstraint())* } void SyntaxPartSpecification(): {} { SyntaxIdentifierList() SyntaxDisplayIdentifier() [SyntaxCardinality()] [ ( | | ) ] } void SyntaxIdentifierList(): {} { | (SyntaxIdentifierListEnd())* } void SyntaxIdentifierListEnd(): {} { } void SyntaxCardinality(): {} { [ ] } void SyntaxAttribute(): {} { SyntaxDisplayIdentifier() [ ] } void SyntaxValueEnumeration(): {} { SyntaxValueDefinition() (SyntaxEnumerationRest())* } void SyntaxValueDefinition(): {} { ( [ ] | ) [ ] } void SyntaxValue(): {} { [] | } void SyntaxEnumerationRest(): {} { SyntaxValueDefinition() } // Change this to a more complex expression if need should arise. void SyntaxFunction(): {} { } void SyntaxConnectSection(): {} { (SyntaxConnection())* } void SyntaxConnection(): {} { [ ] [ ] } void SyntaxConstraint(): {} { SyntaxEquivalenceExpression() } void SyntaxQuantification(): {} { [] ( | ) SyntaxVariableBinding() ( SyntaxVariableBinding())* } void SyntaxVariableBinding(): {} { SyntaxStructureReference() } void SyntaxEquivalenceExpression(): {} { SyntaxImplicationExpression() [ SyntaxImplicationExpression()] } void SyntaxImplicationExpression(): {} { SyntaxAndOrExpression() [ SyntaxAndOrExpression()] } // Syntactically, and's and or's may alternate, but not semantically void SyntaxAndOrExpression(): {} { SyntaxQuantifiedExpression() ((|) SyntaxQuantifiedExpression())*} // nee SyntaxPrimitiveExpression void SyntaxQuantifiedExpression(): // Name is not very good. {} { (LOOKAHEAD(2) SyntaxQuantification())* [] ( SyntaxConfigurationPredicateExpression() | SyntaxComparisonExpression() ) } void SyntaxComparisonExpression(): {} { SyntaxAdditiveExpression() [SyntaxComparisonOperator() SyntaxAdditiveExpression()] } void SyntaxAdditiveExpression(): {} { SyntaxMultiplicativeExpression() ( ( |) SyntaxMultiplicativeExpression())* } void SyntaxMultiplicativeExpression(): {} { SyntaxPrimitiveArithmetic() ( ( |
| ) SyntaxPrimitiveArithmetic())* } void SyntaxPrimitiveArithmetic(): {} { ( LOOKAHEAD(2) [] ( SyntaxCardinalityExpression() | SyntaxAttributeValue() | SyntaxEquivalenceExpression() ) | SyntaxValue() ) } void SyntaxCardinalityExpression(): {} { SyntaxStructureReference() } void SyntaxConfigurationPredicateExpression(): {} { SyntaxPresentExpression() | SyntaxInstanceOfExpression() | SyntaxHasInstancesExpression() | SyntaxHasPartOfTypeExpression() | SyntaxConnectedExpression() | SyntaxConnectedToExpression() } void SyntaxPresentExpression(): {} { SyntaxStructureReference() } void SyntaxInstanceOfExpression(): {} { SyntaxStructureReference() } void SyntaxHasInstancesExpression(): {} { } void SyntaxHasPartOfTypeExpression(): {} { [ LOOKAHEAD(2) SyntaxStructureReference() ] } void SyntaxConnectedExpression(): {} { SyntaxStructureReference() } void SyntaxConnectedToExpression(): {} { SyntaxStructureReference() SyntaxStructureReference() } void SyntaxAttributeValue(): {} { [ LOOKAHEAD(2) SyntaxStructureReference() ] } void SyntaxDisplayIdentifier(): {} { [] } void SyntaxStructureReference(): {} { [SyntaxRootSymbol() | SyntaxStructureReferenceItem()] ( SyntaxStructureReferenceItem()) * [ SyntaxStructureReferenceItem() ] } void SyntaxStructureReferenceItem(): {} { ( | | ) [ ] } void SyntaxRootSymbol(): {} { ( | ) } void SyntaxComparisonOperator(): {} { | | | | | } void SyntaxConfigurationReference(): {} { SyntaxConfigurationComposableReference() [ [ ] [ SyntaxConfigurationComposableReference() [ ]] | [ ] ] } void SyntaxConfigurationComposableReference(): {} { ( | ) (SyntaxConfigurationReferenceItem())* } void SyntaxConfigurationReferenceItem(): {} { [ ] [ ] }