From b88c842ba625753ea185e6166cd967e694160798 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 27 Jun 2021 01:43:59 +0200 Subject: Add enum support --- .../eclipse/viatra/solver/language/Problem.xtext | 42 +++++++++++++++------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext') diff --git a/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext b/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext index 2d4eb1b9..5f8b35f3 100644 --- a/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext +++ b/org.eclipse.viatra.solver.language.parent/org.eclipse.viatra.solver.language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext @@ -4,34 +4,42 @@ import "http://www.eclipse.org/emf/2002/Ecore" as ecore import "http://www.eclipse.org/viatra/solver/language/model/Problem" Problem: - ("problem" name=ID ".")? + ("problem" name=Identifier ".")? statements+=Statement*; Statement: - ClassDeclaration | PredicateDefinition | Assertion | ScopeDeclaration; + ClassDeclaration | EnumDeclaration | PredicateDefinition | Assertion | ScopeDeclaration; ClassDeclaration: abstract?="abstract"? "class" - name=ID - ("extends" superTypes+=[ClassDeclaration|QualifiedName] ("," superTypes+=[ClassDeclaration|QualifiedName])*)? + name=Identifier + ("extends" superTypes+=[Relation|QualifiedName] ("," superTypes+=[Relation|QualifiedName])*)? ("{" (referenceDeclarations+=ReferenceDeclaration ";"?)* "}" | "."); +EnumDeclaration: + "enum" + name=Identifier + ("{" (literals+=EnumLiteral ("," literals+=EnumLiteral)* ("," | ";")?)? "}" | "."); + +EnumLiteral returns Node: + name=QuotedOrUnquotedId; + ReferenceDeclaration: - (containment?="contains" | "refers") - referenceType=[ClassDeclaration|QualifiedName] + (containment?="contains" | "refers")? + referenceType=[Relation|QualifiedName] ("[" multiplicity=Multiplicity "]")? - name=ID + name=Identifier ("opposite" opposite=[ReferenceDeclaration|QualifiedName])?; PredicateDefinition: (error?="error" "pred"? | "pred") - name=ID + name=Identifier "(" (parameters+=Parameter ("," parameters+=Parameter)*)? ")" (":-" bodies+=Conjunction (";" bodies+=Conjunction)*)? "."; Parameter: - parameterType=[ClassDeclaration] name=ID; + parameterType=[Relation|QualifiedName]? name=Identifier; Conjunction: literals+=Literal ("," literals+=Literal)*; @@ -48,7 +56,7 @@ Atom: "(" (arguments+=Argument ("," arguments+=Argument)*)? ")"; Argument: - variable=[Variable]; + variableOrNode=[VariableOrNode|QualifiedName]; Assertion: (relation=[Relation|QualifiedName] @@ -91,10 +99,18 @@ ExactMultiplicity: UpperBound returns ecore::EInt: INT | "*"; +QuotedOrUnquotedId: + QUOTED_ID | Identifier; + QualifiedName: - QUOTED_ID | ID (":" ID)* (":" QUOTED_ID)?; + QUOTED_ID | Identifier (":" Identifier)* (":" QUOTED_ID)?; + +Identifier: + ID | "true" | "false"; @Override -terminal STRING: '"' ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"') )* '"'; +terminal STRING: + '"' ('\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\' | '"'))* '"'; -terminal QUOTED_ID: "'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"; +terminal QUOTED_ID: + "'" ('\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\' | "'"))* "'"; -- cgit v1.2.3-70-g09d2