From b7db563dc425dbf90e42b1c69fb4d52c41a18503 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 28 Jun 2021 02:45:33 +0200 Subject: Add scoping tests and simplify implicit nodes * Do not export implicit nodes to the global scope * Enum literals must not be quoted * Plan for the future: unify quoted nodes from the global scope in post-processing --- language/build.gradle | 1 + .../viatra/solver/language/GenerateProblem.mwe2 | 4 +- .../eclipse/viatra/solver/language/Problem.xtext | 7 +- .../language/generator/ProblemGenerator.java | 30 + .../language/generator/ProblemGenerator.xtend | 25 - .../resource/ProblemDerivedStateComputer.java | 36 +- .../ProblemResourceDescriptionStrategy.java | 94 +-- .../language/scoping/ProblemScopeProvider.java | 18 +- .../language/AbstractProblemRuntimeModule.java | 7 - .../viatra/solver/language/Problem.xtextbin | Bin 7636 -> 7550 bytes .../parser/antlr/internal/InternalProblem.g | 57 +- .../antlr/internal/InternalProblemLexer.java | 74 +-- .../antlr/internal/InternalProblemParser.java | 705 ++++++++------------- .../serializer/ProblemSemanticSequencer.java | 4 +- .../language/services/ProblemGrammarAccess.java | 63 +- .../solver/language/tests/ProblemParsingTest.xtend | 2 +- .../solver/language/tests/ProblemScopingTest.xtend | 148 +++++ .../solver/language/tests/ProblemTestUtil.xtend | 110 ++++ 18 files changed, 704 insertions(+), 681 deletions(-) create mode 100644 language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.java delete mode 100644 language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.xtend create mode 100644 language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend create mode 100644 language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend (limited to 'language') diff --git a/language/build.gradle b/language/build.gradle index 855b0a7f..cbdf3c6a 100644 --- a/language/build.gradle +++ b/language/build.gradle @@ -3,6 +3,7 @@ dependencies { testRuntime 'org.junit.jupiter:junit-jupiter-engine' testCompile "org.eclipse.xtext:org.eclipse.xtext.testing:${xtextVersion}" testCompile "org.eclipse.xtext:org.eclipse.xtext.xbase.testing:${xtextVersion}" + testCompile "org.hamcrest:hamcrest:${hamcrestVersion}" compile "org.eclipse.xtext:org.eclipse.xtext:${xtextVersion}" compile "org.eclipse.xtext:org.eclipse.xtext.xbase:${xtextVersion}" compile 'org.eclipse.emf:org.eclipse.emf.ecore' diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/GenerateProblem.mwe2 b/language/src/main/java/org/eclipse/viatra/solver/language/GenerateProblem.mwe2 index a63681c8..da5e95a4 100644 --- a/language/src/main/java/org/eclipse/viatra/solver/language/GenerateProblem.mwe2 +++ b/language/src/main/java/org/eclipse/viatra/solver/language/GenerateProblem.mwe2 @@ -43,9 +43,7 @@ Workflow { validator = { generateDeprecationValidation = true } - generator = { - generateXtendStub = true - } + generator = null junitSupport = { junitVersion = "5" } diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext b/language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext index 7e253ef5..495f50e4 100644 --- a/language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext +++ b/language/src/main/java/org/eclipse/viatra/solver/language/Problem.xtext @@ -22,7 +22,7 @@ EnumDeclaration: ("{" (literals+=EnumLiteral ("," literals+=EnumLiteral)* ("," | ";")?)? "}" | "."); EnumLiteral returns Node: - name=QuotedOrUnquotedId; + name=Identifier; ReferenceDeclaration: (containment?="contains" | "refers")? @@ -129,11 +129,8 @@ ExactMultiplicity: UpperBound returns ecore::EInt: INT | "*"; -QuotedOrUnquotedId: - QUOTED_ID | Identifier; - QualifiedName hidden(): - QUOTED_ID | Identifier ("::" Identifier)* ("::" QUOTED_ID)?; + QUOTED_ID | Identifier ("::" Identifier)*; Identifier: ID | "true" | "false" | "e" | "E"; diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.java b/language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.java new file mode 100644 index 00000000..b6ea3553 --- /dev/null +++ b/language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.java @@ -0,0 +1,30 @@ +/* + * generated by Xtext 2.26.0.M1 + */ +package org.eclipse.viatra.solver.language.generator; + +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.xtext.generator.AbstractGenerator; +import org.eclipse.xtext.generator.IFileSystemAccess2; +import org.eclipse.xtext.generator.IGeneratorContext; + +/** + * Generates code from your model files on save. + * + * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation + */ +public class ProblemGenerator extends AbstractGenerator { + + @Override + public void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) { +// Iterator filtered = Iterators.filter(resource.getAllContents(), Greeting.class); +// Iterator names = Iterators.transform(filtered, new Function() { +// +// @Override +// public String apply(Greeting greeting) { +// return greeting.getName(); +// } +// }); +// fsa.generateFile("greetings.txt", "People to greet: " + IteratorExtensions.join(names, ", ")); + } +} diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.xtend b/language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.xtend deleted file mode 100644 index 0930f244..00000000 --- a/language/src/main/java/org/eclipse/viatra/solver/language/generator/ProblemGenerator.xtend +++ /dev/null @@ -1,25 +0,0 @@ -/* - * generated by Xtext 2.25.0 - */ -package org.eclipse.viatra.solver.language.generator - -import org.eclipse.emf.ecore.resource.Resource -import org.eclipse.xtext.generator.AbstractGenerator -import org.eclipse.xtext.generator.IFileSystemAccess2 -import org.eclipse.xtext.generator.IGeneratorContext - -/** - * Generates code from your model files on save. - * - * See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#code-generation - */ -class ProblemGenerator extends AbstractGenerator { - - override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) { -// fsa.generateFile('greetings.txt', 'People to greet: ' + -// resource.allContents -// .filter(Greeting) -// .map[name] -// .join(', ')) - } -} diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemDerivedStateComputer.java b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemDerivedStateComputer.java index fc03fa87..56d8ad71 100644 --- a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemDerivedStateComputer.java +++ b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemDerivedStateComputer.java @@ -73,13 +73,14 @@ public class ProblemDerivedStateComputer implements IDerivedStateComputer { protected void installDerivedProblemState(Problem problem, boolean preLinkingPhase) { installNewNodes(problem); - if (!preLinkingPhase) { - installDerivedNodes(problem); - for (Statement statement : problem.getStatements()) { - if (statement instanceof PredicateDefinition) { - PredicateDefinition definition = (PredicateDefinition) statement; - installDerivedPredicateDefinitionState(definition); - } + if (preLinkingPhase) { + return; + } + Set nodeNames = installDerivedNodes(problem); + for (Statement statement : problem.getStatements()) { + if (statement instanceof PredicateDefinition) { + PredicateDefinition definition = (PredicateDefinition) statement; + installDerivedPredicateDefinitionState(definition, nodeNames); } } } @@ -88,7 +89,7 @@ public class ProblemDerivedStateComputer implements IDerivedStateComputer { for (Statement statement : problem.getStatements()) { if (statement instanceof ClassDeclaration) { ClassDeclaration declaration = (ClassDeclaration) statement; - if (!declaration.isAbstract()) { + if (!declaration.isAbstract() && declaration.getNewNode() == null) { Node newNode = createNode(NEW_NODE); declaration.setNewNode(newNode); } @@ -96,7 +97,7 @@ public class ProblemDerivedStateComputer implements IDerivedStateComputer { } } - protected void installDerivedNodes(Problem problem) { + protected Set installDerivedNodes(Problem problem) { IScope nodeScope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__ARGUMENTS); Set nodeNames = new HashSet<>(); for (Statement statement : problem.getStatements()) { @@ -142,6 +143,7 @@ public class ProblemDerivedStateComputer implements IDerivedStateComputer { Node graphNode = createNode(nodeName); grapNodes.add(graphNode); } + return nodeNames; } private void addNodeNames(Set nodeNames, IScope nodeScope, EObject eObject, EStructuralFeature feature, @@ -165,16 +167,17 @@ public class ProblemDerivedStateComputer implements IDerivedStateComputer { return node; } - protected void installDerivedPredicateDefinitionState(PredicateDefinition definition) { - Set parameterNames = new HashSet<>(); + protected void installDerivedPredicateDefinitionState(PredicateDefinition definition, Set nodeNames) { + Set knownVariables = new HashSet<>(); + knownVariables.addAll(nodeNames); for (Parameter parameter : definition.getParameters()) { String name = parameter.getName(); if (name != null) { - parameterNames.add(name); + knownVariables.add(name); } } for (Conjunction body : definition.getBodies()) { - installDeriveConjunctionState(body, parameterNames); + installDeriveConjunctionState(body, knownVariables); } } @@ -271,10 +274,9 @@ public class ProblemDerivedStateComputer implements IDerivedStateComputer { protected void discardDerivedProblemState(Problem problem) { problem.getNodes().clear(); for (Statement statement : problem.getStatements()) { - if (statement instanceof ClassDeclaration) { - ClassDeclaration classDeclaration = (ClassDeclaration) statement; - classDeclaration.setNewNode(null); - } else if (statement instanceof PredicateDefinition) { + // We deliberately don't clean up {@link ClassDeclaration#getNewNode()} nodes, + // because they have already been exported to the Xtext index. + if (statement instanceof PredicateDefinition) { PredicateDefinition definition = (PredicateDefinition) statement; for (Conjunction body : definition.getBodies()) { body.getImplicitVariables().clear(); diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java index edb25a1c..4d932a92 100644 --- a/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java +++ b/language/src/main/java/org/eclipse/viatra/solver/language/resource/ProblemResourceDescriptionStrategy.java @@ -24,56 +24,70 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti @Override public boolean createEObjectDescriptions(EObject eObject, IAcceptor acceptor) { - if (eObject instanceof Variable) { + if (!shouldExport(eObject)) { return false; } - if (eObject instanceof NamedElement) { - NamedElement namedElement = (NamedElement) eObject; - String name = namedElement.getName(); - if (name == null || name.isEmpty()) { - return true; - } - Problem problem = EcoreUtil2.getContainerOfType(namedElement, Problem.class); - QualifiedName problemQualifiedName = null; - if (problem != null) { - String problemName = problem.getName(); - if (problemName != null && !problemName.isEmpty()) { - problemQualifiedName = qualifiedNameConverter.toQualifiedName(problemName); - } - } - QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(namedElement.getName()); - boolean nameExported; - if (shouldExportSimpleName(namedElement)) { - acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); - nameExported = true; - } else { - nameExported = false; + if (!(eObject instanceof NamedElement)) { + return true; + } + NamedElement namedElement = (NamedElement) eObject; + String name = namedElement.getName(); + if (name == null || name.isEmpty()) { + return true; + } + Problem problem = EcoreUtil2.getContainerOfType(namedElement, Problem.class); + QualifiedName problemQualifiedName = null; + if (problem != null) { + String problemName = problem.getName(); + if (problemName != null && !problemName.isEmpty()) { + problemQualifiedName = qualifiedNameConverter.toQualifiedName(problemName); } - EObject parent = namedElement.eContainer(); - while (parent != null && parent != problem) { - if (parent instanceof NamedElement) { - NamedElement namedParent = (NamedElement) parent; - String parentName = namedParent.getName(); - if (parentName != null || !name.isEmpty()) { - QualifiedName parentQualifiedName = qualifiedNameConverter.toQualifiedName(parentName); - qualifiedName = parentQualifiedName.append(qualifiedName); - if (shouldExportSimpleName(parent)) { - acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); - nameExported = true; - } else { - nameExported = false; - } + } + QualifiedName qualifiedName = qualifiedNameConverter.toQualifiedName(namedElement.getName()); + boolean nameExported; + if (shouldExportSimpleName(namedElement)) { + acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); + nameExported = true; + } else { + nameExported = false; + } + EObject parent = namedElement.eContainer(); + while (parent != null && parent != problem) { + if (parent instanceof NamedElement) { + NamedElement namedParent = (NamedElement) parent; + String parentName = namedParent.getName(); + if (parentName != null || !name.isEmpty()) { + QualifiedName parentQualifiedName = qualifiedNameConverter.toQualifiedName(parentName); + qualifiedName = parentQualifiedName.append(qualifiedName); + if (shouldExportSimpleName(namedParent)) { + acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); + nameExported = true; + } else { + nameExported = false; } } - parent = parent.eContainer(); - } - if (!nameExported) { - acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); } + parent = parent.eContainer(); + } + if (!nameExported) { + acceptEObjectDescription(namedElement, problemQualifiedName, qualifiedName, acceptor); } return true; } + protected boolean shouldExport(EObject eObject) { + if (eObject instanceof Variable) { + // Variables are always private to the containing predicate definition. + return false; + } + if (eObject instanceof Node) { + Node node = (Node) eObject; + // Only enum literals and new nodes are visible across problem files. + return ProblemUtil.isEnumLiteral(node) || ProblemUtil.isNewNode(node); + } + return true; + } + protected boolean shouldExportSimpleName(EObject eObject) { if (eObject instanceof Node) { return !ProblemUtil.isNewNode((Node) eObject); diff --git a/language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java b/language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java index 3748e81d..597085a8 100644 --- a/language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java +++ b/language/src/main/java/org/eclipse/viatra/solver/language/scoping/ProblemScopeProvider.java @@ -13,6 +13,7 @@ import org.eclipse.viatra.solver.language.ProblemUtil; import org.eclipse.viatra.solver.language.model.problem.ClassDeclaration; import org.eclipse.viatra.solver.language.model.problem.ExistentialQuantifier; import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition; +import org.eclipse.viatra.solver.language.model.problem.Problem; import org.eclipse.viatra.solver.language.model.problem.ProblemPackage; import org.eclipse.viatra.solver.language.model.problem.ReferenceDeclaration; import org.eclipse.viatra.solver.language.model.problem.Relation; @@ -34,14 +35,27 @@ public class ProblemScopeProvider extends AbstractProblemScopeProvider { @Override public IScope getScope(EObject context, EReference reference) { IScope scope = super.getScope(context, reference); + if (reference == ProblemPackage.Literals.NODE_ASSERTION_ARGUMENT__NODE + || reference == ProblemPackage.Literals.NODE_VALUE_ASSERTION__NODE) { + return getNodesScope(context, scope); + } if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_ARGUMENT__VARIABLE_OR_NODE) { return getVariableScope(context, scope); - } else if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) { + } + if (reference == ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) { return getOppositeScope(context, scope); } return scope; } + protected IScope getNodesScope(EObject context, IScope delegateScope) { + Problem problem = EcoreUtil2.getContainerOfType(context, Problem.class); + if (problem == null) { + return delegateScope; + } + return Scopes.scopeFor(problem.getNodes(), delegateScope); + } + protected IScope getVariableScope(EObject context, IScope delegateScope) { List variables = new ArrayList<>(); EObject currentContext = context; @@ -63,7 +77,7 @@ public class ProblemScopeProvider extends AbstractProblemScopeProvider { PredicateDefinition definition = (PredicateDefinition) currentContext; variables.addAll(definition.getParameters()); } - return Scopes.scopeFor(variables, delegateScope); + return Scopes.scopeFor(variables, getNodesScope(context, delegateScope)); } protected IScope getOppositeScope(EObject context, IScope delegateScope) { diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/AbstractProblemRuntimeModule.java b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/AbstractProblemRuntimeModule.java index 642b465b..24bed771 100644 --- a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/AbstractProblemRuntimeModule.java +++ b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/AbstractProblemRuntimeModule.java @@ -7,7 +7,6 @@ import com.google.inject.Binder; import com.google.inject.Provider; import com.google.inject.name.Names; import java.util.Properties; -import org.eclipse.viatra.solver.language.generator.ProblemGenerator; import org.eclipse.viatra.solver.language.parser.antlr.ProblemAntlrTokenFileProvider; import org.eclipse.viatra.solver.language.parser.antlr.ProblemParser; import org.eclipse.viatra.solver.language.parser.antlr.internal.InternalProblemLexer; @@ -19,7 +18,6 @@ import org.eclipse.viatra.solver.language.validation.ProblemConfigurableIssueCod import org.eclipse.viatra.solver.language.validation.ProblemValidator; import org.eclipse.xtext.Constants; import org.eclipse.xtext.IGrammarAccess; -import org.eclipse.xtext.generator.IGenerator2; import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; import org.eclipse.xtext.naming.IQualifiedNameProvider; import org.eclipse.xtext.parser.IParser; @@ -193,9 +191,4 @@ public abstract class AbstractProblemRuntimeModule extends DefaultRuntimeModule binder.bind(IResourceDescriptions.class).annotatedWith(Names.named(ResourceDescriptionsProvider.PERSISTED_DESCRIPTIONS)).to(ResourceSetBasedResourceDescriptions.class); } - // contributed by org.eclipse.xtext.xtext.generator.generator.GeneratorFragment2 - public Class bindIGenerator2() { - return ProblemGenerator.class; - } - } diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/Problem.xtextbin b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/Problem.xtextbin index a5b00fe3..9528b778 100644 Binary files a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/Problem.xtextbin and b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/Problem.xtextbin differ diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblem.g b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblem.g index 4ef02d71..f9372e7b 100644 --- a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblem.g +++ b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblem.g @@ -478,9 +478,9 @@ ruleEnumLiteral returns [EObject current=null] ( ( { - newCompositeNode(grammarAccess.getEnumLiteralAccess().getNameQuotedOrUnquotedIdParserRuleCall_0()); + newCompositeNode(grammarAccess.getEnumLiteralAccess().getNameIdentifierParserRuleCall_0()); } - lv_name_0_0=ruleQuotedOrUnquotedId + lv_name_0_0=ruleIdentifier { if ($current==null) { $current = createModelElementForParent(grammarAccess.getEnumLiteralRule()); @@ -489,7 +489,7 @@ ruleEnumLiteral returns [EObject current=null] $current, "name", lv_name_0_0, - "org.eclipse.viatra.solver.language.Problem.QuotedOrUnquotedId"); + "org.eclipse.viatra.solver.language.Problem.Identifier"); afterParserOrEnumRuleCall(); } ) @@ -2097,43 +2097,6 @@ ruleUpperBound returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToke ) ; -// Entry rule entryRuleQuotedOrUnquotedId -entryRuleQuotedOrUnquotedId returns [String current=null]: - { newCompositeNode(grammarAccess.getQuotedOrUnquotedIdRule()); } - iv_ruleQuotedOrUnquotedId=ruleQuotedOrUnquotedId - { $current=$iv_ruleQuotedOrUnquotedId.current.getText(); } - EOF; - -// Rule QuotedOrUnquotedId -ruleQuotedOrUnquotedId returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] -@init { - enterRule(); -} -@after { - leaveRule(); -}: - ( - this_QUOTED_ID_0=RULE_QUOTED_ID - { - $current.merge(this_QUOTED_ID_0); - } - { - newLeafNode(this_QUOTED_ID_0, grammarAccess.getQuotedOrUnquotedIdAccess().getQUOTED_IDTerminalRuleCall_0()); - } - | - { - newCompositeNode(grammarAccess.getQuotedOrUnquotedIdAccess().getIdentifierParserRuleCall_1()); - } - this_Identifier_1=ruleIdentifier - { - $current.merge(this_Identifier_1); - } - { - afterParserOrEnumRuleCall(); - } - ) -; - // Entry rule entryRuleQualifiedName entryRuleQualifiedName returns [String current=null]@init { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); @@ -2192,20 +2155,6 @@ ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleT afterParserOrEnumRuleCall(); } )* - ( - kw='::' - { - $current.merge(kw); - newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1_2_0()); - } - this_QUOTED_ID_5=RULE_QUOTED_ID - { - $current.merge(this_QUOTED_ID_5); - } - { - newLeafNode(this_QUOTED_ID_5, grammarAccess.getQualifiedNameAccess().getQUOTED_IDTerminalRuleCall_1_2_1()); - } - )? ) ) ; diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemLexer.java b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemLexer.java index 345610ce..8adc6935 100644 --- a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemLexer.java +++ b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemLexer.java @@ -814,8 +814,8 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2478:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) - // InternalProblem.g:2478:11: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + // InternalProblem.g:2427:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* ) + // InternalProblem.g:2427:11: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* { if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -826,7 +826,7 @@ public class InternalProblemLexer extends Lexer { recover(mse); throw mse;} - // InternalProblem.g:2478:35: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* + // InternalProblem.g:2427:35: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* loop1: do { int alt1=2; @@ -875,11 +875,11 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_STRING; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2480:13: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' ) - // InternalProblem.g:2480:15: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' + // InternalProblem.g:2429:13: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' ) + // InternalProblem.g:2429:15: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' { match('\"'); - // InternalProblem.g:2480:19: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* + // InternalProblem.g:2429:19: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* loop2: do { int alt2=3; @@ -895,7 +895,7 @@ public class InternalProblemLexer extends Lexer { switch (alt2) { case 1 : - // InternalProblem.g:2480:20: '\\\\' . + // InternalProblem.g:2429:20: '\\\\' . { match('\\'); matchAny(); @@ -903,7 +903,7 @@ public class InternalProblemLexer extends Lexer { } break; case 2 : - // InternalProblem.g:2480:27: ~ ( ( '\\\\' | '\"' ) ) + // InternalProblem.g:2429:27: ~ ( ( '\\\\' | '\"' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -940,11 +940,11 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_QUOTED_ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2482:16: ( '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) - // InternalProblem.g:2482:18: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' + // InternalProblem.g:2431:16: ( '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) + // InternalProblem.g:2431:18: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' { match('\''); - // InternalProblem.g:2482:23: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* + // InternalProblem.g:2431:23: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* loop3: do { int alt3=3; @@ -960,7 +960,7 @@ public class InternalProblemLexer extends Lexer { switch (alt3) { case 1 : - // InternalProblem.g:2482:24: '\\\\' . + // InternalProblem.g:2431:24: '\\\\' . { match('\\'); matchAny(); @@ -968,7 +968,7 @@ public class InternalProblemLexer extends Lexer { } break; case 2 : - // InternalProblem.g:2482:31: ~ ( ( '\\\\' | '\\'' ) ) + // InternalProblem.g:2431:31: ~ ( ( '\\\\' | '\\'' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -1005,10 +1005,10 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_SL_COMMENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2484:17: ( ( '%' | '//' ) (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? ) - // InternalProblem.g:2484:19: ( '%' | '//' ) (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? + // InternalProblem.g:2433:17: ( ( '%' | '//' ) (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? ) + // InternalProblem.g:2433:19: ( '%' | '//' ) (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? { - // InternalProblem.g:2484:19: ( '%' | '//' ) + // InternalProblem.g:2433:19: ( '%' | '//' ) int alt4=2; int LA4_0 = input.LA(1); @@ -1026,14 +1026,14 @@ public class InternalProblemLexer extends Lexer { } switch (alt4) { case 1 : - // InternalProblem.g:2484:20: '%' + // InternalProblem.g:2433:20: '%' { match('%'); } break; case 2 : - // InternalProblem.g:2484:24: '//' + // InternalProblem.g:2433:24: '//' { match("//"); @@ -1043,7 +1043,7 @@ public class InternalProblemLexer extends Lexer { } - // InternalProblem.g:2484:30: (~ ( ( '\\n' | '\\r' ) ) )* + // InternalProblem.g:2433:30: (~ ( ( '\\n' | '\\r' ) ) )* loop5: do { int alt5=2; @@ -1056,7 +1056,7 @@ public class InternalProblemLexer extends Lexer { switch (alt5) { case 1 : - // InternalProblem.g:2484:30: ~ ( ( '\\n' | '\\r' ) ) + // InternalProblem.g:2433:30: ~ ( ( '\\n' | '\\r' ) ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -1076,7 +1076,7 @@ public class InternalProblemLexer extends Lexer { } } while (true); - // InternalProblem.g:2484:46: ( ( '\\r' )? '\\n' )? + // InternalProblem.g:2433:46: ( ( '\\r' )? '\\n' )? int alt7=2; int LA7_0 = input.LA(1); @@ -1085,9 +1085,9 @@ public class InternalProblemLexer extends Lexer { } switch (alt7) { case 1 : - // InternalProblem.g:2484:47: ( '\\r' )? '\\n' + // InternalProblem.g:2433:47: ( '\\r' )? '\\n' { - // InternalProblem.g:2484:47: ( '\\r' )? + // InternalProblem.g:2433:47: ( '\\r' )? int alt6=2; int LA6_0 = input.LA(1); @@ -1096,7 +1096,7 @@ public class InternalProblemLexer extends Lexer { } switch (alt6) { case 1 : - // InternalProblem.g:2484:47: '\\r' + // InternalProblem.g:2433:47: '\\r' { match('\r'); @@ -1128,10 +1128,10 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_INT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2486:10: ( ( '0' .. '9' )+ ) - // InternalProblem.g:2486:12: ( '0' .. '9' )+ + // InternalProblem.g:2435:10: ( ( '0' .. '9' )+ ) + // InternalProblem.g:2435:12: ( '0' .. '9' )+ { - // InternalProblem.g:2486:12: ( '0' .. '9' )+ + // InternalProblem.g:2435:12: ( '0' .. '9' )+ int cnt8=0; loop8: do { @@ -1145,7 +1145,7 @@ public class InternalProblemLexer extends Lexer { switch (alt8) { case 1 : - // InternalProblem.g:2486:13: '0' .. '9' + // InternalProblem.g:2435:13: '0' .. '9' { matchRange('0','9'); @@ -1177,12 +1177,12 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_ML_COMMENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2488:17: ( '/*' ( options {greedy=false; } : . )* '*/' ) - // InternalProblem.g:2488:19: '/*' ( options {greedy=false; } : . )* '*/' + // InternalProblem.g:2437:17: ( '/*' ( options {greedy=false; } : . )* '*/' ) + // InternalProblem.g:2437:19: '/*' ( options {greedy=false; } : . )* '*/' { match("/*"); - // InternalProblem.g:2488:24: ( options {greedy=false; } : . )* + // InternalProblem.g:2437:24: ( options {greedy=false; } : . )* loop9: do { int alt9=2; @@ -1207,7 +1207,7 @@ public class InternalProblemLexer extends Lexer { switch (alt9) { case 1 : - // InternalProblem.g:2488:52: . + // InternalProblem.g:2437:52: . { matchAny(); @@ -1237,10 +1237,10 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2490:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // InternalProblem.g:2490:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // InternalProblem.g:2439:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // InternalProblem.g:2439:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // InternalProblem.g:2490:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // InternalProblem.g:2439:11: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt10=0; loop10: do { @@ -1294,8 +1294,8 @@ public class InternalProblemLexer extends Lexer { try { int _type = RULE_ANY_OTHER; int _channel = DEFAULT_TOKEN_CHANNEL; - // InternalProblem.g:2492:16: ( . ) - // InternalProblem.g:2492:18: . + // InternalProblem.g:2441:16: ( . ) + // InternalProblem.g:2441:18: . { matchAny(); diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemParser.java b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemParser.java index cd8f706a..f0a69c90 100644 --- a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemParser.java +++ b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/parser/antlr/internal/InternalProblemParser.java @@ -1005,7 +1005,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { int alt12=2; int LA12_0 = input.LA(1); - if ( (LA12_0==RULE_ID||LA12_0==RULE_QUOTED_ID||(LA12_0>=41 && LA12_0<=44)) ) { + if ( (LA12_0==RULE_ID||(LA12_0>=41 && LA12_0<=44)) ) { alt12=1; } switch (alt12) { @@ -1052,7 +1052,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { if ( (LA10_0==17) ) { int LA10_1 = input.LA(2); - if ( (LA10_1==RULE_ID||LA10_1==RULE_QUOTED_ID||(LA10_1>=41 && LA10_1<=44)) ) { + if ( (LA10_1==RULE_ID||(LA10_1>=41 && LA10_1<=44)) ) { alt10=1; } @@ -1064,7 +1064,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { case 1 : // InternalProblem.g:413:7: otherlv_4= ',' ( (lv_literals_5_0= ruleEnumLiteral ) ) { - otherlv_4=(Token)match(input,17,FOLLOW_8); + otherlv_4=(Token)match(input,17,FOLLOW_3); newLeafNode(otherlv_4, grammarAccess.getEnumDeclarationAccess().getCommaKeyword_2_0_1_1_0()); @@ -1230,7 +1230,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleEnumLiteral" - // InternalProblem.g:471:1: ruleEnumLiteral returns [EObject current=null] : ( (lv_name_0_0= ruleQuotedOrUnquotedId ) ) ; + // InternalProblem.g:471:1: ruleEnumLiteral returns [EObject current=null] : ( (lv_name_0_0= ruleIdentifier ) ) ; public final EObject ruleEnumLiteral() throws RecognitionException { EObject current = null; @@ -1241,20 +1241,20 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalProblem.g:477:2: ( ( (lv_name_0_0= ruleQuotedOrUnquotedId ) ) ) - // InternalProblem.g:478:2: ( (lv_name_0_0= ruleQuotedOrUnquotedId ) ) + // InternalProblem.g:477:2: ( ( (lv_name_0_0= ruleIdentifier ) ) ) + // InternalProblem.g:478:2: ( (lv_name_0_0= ruleIdentifier ) ) { - // InternalProblem.g:478:2: ( (lv_name_0_0= ruleQuotedOrUnquotedId ) ) - // InternalProblem.g:479:3: (lv_name_0_0= ruleQuotedOrUnquotedId ) + // InternalProblem.g:478:2: ( (lv_name_0_0= ruleIdentifier ) ) + // InternalProblem.g:479:3: (lv_name_0_0= ruleIdentifier ) { - // InternalProblem.g:479:3: (lv_name_0_0= ruleQuotedOrUnquotedId ) - // InternalProblem.g:480:4: lv_name_0_0= ruleQuotedOrUnquotedId + // InternalProblem.g:479:3: (lv_name_0_0= ruleIdentifier ) + // InternalProblem.g:480:4: lv_name_0_0= ruleIdentifier { - newCompositeNode(grammarAccess.getEnumLiteralAccess().getNameQuotedOrUnquotedIdParserRuleCall_0()); + newCompositeNode(grammarAccess.getEnumLiteralAccess().getNameIdentifierParserRuleCall_0()); pushFollow(FOLLOW_2); - lv_name_0_0=ruleQuotedOrUnquotedId(); + lv_name_0_0=ruleIdentifier(); state._fsp--; @@ -1266,7 +1266,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { current, "name", lv_name_0_0, - "org.eclipse.viatra.solver.language.Problem.QuotedOrUnquotedId"); + "org.eclipse.viatra.solver.language.Problem.Identifier"); afterParserOrEnumRuleCall(); @@ -4242,19 +4242,26 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { if ( (LA37_1==RULE_INT) ) { switch ( input.LA(3) ) { + case EOF: + case 17: + case 30: + { + alt37=1; + } + break; case 13: { - int LA37_4 = input.LA(4); + int LA37_5 = input.LA(4); - if ( (LA37_4==RULE_INT) ) { - alt37=2; - } - else if ( (LA37_4==EOF||LA37_4==RULE_ID||LA37_4==RULE_QUOTED_ID||(LA37_4>=14 && LA37_4<=15)||LA37_4==21||(LA37_4>=27 && LA37_4<=28)||LA37_4==32||LA37_4==35||(LA37_4>=41 && LA37_4<=44)||LA37_4==47) ) { + if ( (LA37_5==EOF||LA37_5==RULE_ID||LA37_5==RULE_QUOTED_ID||(LA37_5>=14 && LA37_5<=15)||LA37_5==21||(LA37_5>=27 && LA37_5<=28)||LA37_5==32||LA37_5==35||(LA37_5>=41 && LA37_5<=44)||LA37_5==47) ) { alt37=1; } + else if ( (LA37_5==RULE_INT) ) { + alt37=2; + } else { NoViableAltException nvae = - new NoViableAltException("", 37, 4, input); + new NoViableAltException("", 37, 5, input); throw nvae; } @@ -4266,13 +4273,6 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { alt37=2; } break; - case EOF: - case 17: - case 30: - { - alt37=1; - } - break; default: NoViableAltException nvae = new NoViableAltException("", 37, 2, input); @@ -4292,19 +4292,26 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { case RULE_INT: { switch ( input.LA(2) ) { + case EOF: + case 17: + case 30: + { + alt37=1; + } + break; case 13: { - int LA37_4 = input.LA(3); + int LA37_5 = input.LA(3); - if ( (LA37_4==RULE_INT) ) { - alt37=2; - } - else if ( (LA37_4==EOF||LA37_4==RULE_ID||LA37_4==RULE_QUOTED_ID||(LA37_4>=14 && LA37_4<=15)||LA37_4==21||(LA37_4>=27 && LA37_4<=28)||LA37_4==32||LA37_4==35||(LA37_4>=41 && LA37_4<=44)||LA37_4==47) ) { + if ( (LA37_5==EOF||LA37_5==RULE_ID||LA37_5==RULE_QUOTED_ID||(LA37_5>=14 && LA37_5<=15)||LA37_5==21||(LA37_5>=27 && LA37_5<=28)||LA37_5==32||LA37_5==35||(LA37_5>=41 && LA37_5<=44)||LA37_5==47) ) { alt37=1; } + else if ( (LA37_5==RULE_INT) ) { + alt37=2; + } else { NoViableAltException nvae = - new NoViableAltException("", 37, 4, input); + new NoViableAltException("", 37, 5, input); throw nvae; } @@ -4316,13 +4323,6 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { alt37=2; } break; - case EOF: - case 17: - case 30: - { - alt37=1; - } - break; default: NoViableAltException nvae = new NoViableAltException("", 37, 2, input); @@ -5773,132 +5773,8 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR end "ruleUpperBound" - // $ANTLR start "entryRuleQuotedOrUnquotedId" - // InternalProblem.g:2101:1: entryRuleQuotedOrUnquotedId returns [String current=null] : iv_ruleQuotedOrUnquotedId= ruleQuotedOrUnquotedId EOF ; - public final String entryRuleQuotedOrUnquotedId() throws RecognitionException { - String current = null; - - AntlrDatatypeRuleToken iv_ruleQuotedOrUnquotedId = null; - - - try { - // InternalProblem.g:2101:58: (iv_ruleQuotedOrUnquotedId= ruleQuotedOrUnquotedId EOF ) - // InternalProblem.g:2102:2: iv_ruleQuotedOrUnquotedId= ruleQuotedOrUnquotedId EOF - { - newCompositeNode(grammarAccess.getQuotedOrUnquotedIdRule()); - pushFollow(FOLLOW_1); - iv_ruleQuotedOrUnquotedId=ruleQuotedOrUnquotedId(); - - state._fsp--; - - current =iv_ruleQuotedOrUnquotedId.getText(); - match(input,EOF,FOLLOW_2); - - } - - } - - catch (RecognitionException re) { - recover(input,re); - appendSkippedTokens(); - } - finally { - } - return current; - } - // $ANTLR end "entryRuleQuotedOrUnquotedId" - - - // $ANTLR start "ruleQuotedOrUnquotedId" - // InternalProblem.g:2108:1: ruleQuotedOrUnquotedId returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QUOTED_ID_0= RULE_QUOTED_ID | this_Identifier_1= ruleIdentifier ) ; - public final AntlrDatatypeRuleToken ruleQuotedOrUnquotedId() throws RecognitionException { - AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken(); - - Token this_QUOTED_ID_0=null; - AntlrDatatypeRuleToken this_Identifier_1 = null; - - - - enterRule(); - - try { - // InternalProblem.g:2114:2: ( (this_QUOTED_ID_0= RULE_QUOTED_ID | this_Identifier_1= ruleIdentifier ) ) - // InternalProblem.g:2115:2: (this_QUOTED_ID_0= RULE_QUOTED_ID | this_Identifier_1= ruleIdentifier ) - { - // InternalProblem.g:2115:2: (this_QUOTED_ID_0= RULE_QUOTED_ID | this_Identifier_1= ruleIdentifier ) - int alt43=2; - int LA43_0 = input.LA(1); - - if ( (LA43_0==RULE_QUOTED_ID) ) { - alt43=1; - } - else if ( (LA43_0==RULE_ID||(LA43_0>=41 && LA43_0<=44)) ) { - alt43=2; - } - else { - NoViableAltException nvae = - new NoViableAltException("", 43, 0, input); - - throw nvae; - } - switch (alt43) { - case 1 : - // InternalProblem.g:2116:3: this_QUOTED_ID_0= RULE_QUOTED_ID - { - this_QUOTED_ID_0=(Token)match(input,RULE_QUOTED_ID,FOLLOW_2); - - current.merge(this_QUOTED_ID_0); - - - newLeafNode(this_QUOTED_ID_0, grammarAccess.getQuotedOrUnquotedIdAccess().getQUOTED_IDTerminalRuleCall_0()); - - - } - break; - case 2 : - // InternalProblem.g:2124:3: this_Identifier_1= ruleIdentifier - { - - newCompositeNode(grammarAccess.getQuotedOrUnquotedIdAccess().getIdentifierParserRuleCall_1()); - - pushFollow(FOLLOW_2); - this_Identifier_1=ruleIdentifier(); - - state._fsp--; - - - current.merge(this_Identifier_1); - - - afterParserOrEnumRuleCall(); - - - } - break; - - } - - - } - - - leaveRule(); - - } - - catch (RecognitionException re) { - recover(input,re); - appendSkippedTokens(); - } - finally { - } - return current; - } - // $ANTLR end "ruleQuotedOrUnquotedId" - - // $ANTLR start "entryRuleQualifiedName" - // InternalProblem.g:2138:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ; + // InternalProblem.g:2101:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ; public final String entryRuleQualifiedName() throws RecognitionException { String current = null; @@ -5909,8 +5785,8 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); try { - // InternalProblem.g:2140:2: (iv_ruleQualifiedName= ruleQualifiedName EOF ) - // InternalProblem.g:2141:2: iv_ruleQualifiedName= ruleQualifiedName EOF + // InternalProblem.g:2103:2: (iv_ruleQualifiedName= ruleQualifiedName EOF ) + // InternalProblem.g:2104:2: iv_ruleQualifiedName= ruleQualifiedName EOF { newCompositeNode(grammarAccess.getQualifiedNameRule()); pushFollow(FOLLOW_1); @@ -5940,13 +5816,12 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleQualifiedName" - // InternalProblem.g:2150:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? ) ) ; + // InternalProblem.g:2113:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* ) ) ; public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException { AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken(); Token this_QUOTED_ID_0=null; Token kw=null; - Token this_QUOTED_ID_5=null; AntlrDatatypeRuleToken this_Identifier_1 = null; AntlrDatatypeRuleToken this_Identifier_3 = null; @@ -5957,28 +5832,28 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); try { - // InternalProblem.g:2157:2: ( (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? ) ) ) - // InternalProblem.g:2158:2: (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? ) ) + // InternalProblem.g:2120:2: ( (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* ) ) ) + // InternalProblem.g:2121:2: (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* ) ) { - // InternalProblem.g:2158:2: (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? ) ) - int alt46=2; - int LA46_0 = input.LA(1); + // InternalProblem.g:2121:2: (this_QUOTED_ID_0= RULE_QUOTED_ID | (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* ) ) + int alt44=2; + int LA44_0 = input.LA(1); - if ( (LA46_0==RULE_QUOTED_ID) ) { - alt46=1; + if ( (LA44_0==RULE_QUOTED_ID) ) { + alt44=1; } - else if ( (LA46_0==RULE_ID||(LA46_0>=41 && LA46_0<=44)) ) { - alt46=2; + else if ( (LA44_0==RULE_ID||(LA44_0>=41 && LA44_0<=44)) ) { + alt44=2; } else { NoViableAltException nvae = - new NoViableAltException("", 46, 0, input); + new NoViableAltException("", 44, 0, input); throw nvae; } - switch (alt46) { + switch (alt44) { case 1 : - // InternalProblem.g:2159:3: this_QUOTED_ID_0= RULE_QUOTED_ID + // InternalProblem.g:2122:3: this_QUOTED_ID_0= RULE_QUOTED_ID { this_QUOTED_ID_0=(Token)match(input,RULE_QUOTED_ID,FOLLOW_2); @@ -5991,10 +5866,10 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2167:3: (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? ) + // InternalProblem.g:2130:3: (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* ) { - // InternalProblem.g:2167:3: (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? ) - // InternalProblem.g:2168:4: this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? + // InternalProblem.g:2130:3: (this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* ) + // InternalProblem.g:2131:4: this_Identifier_1= ruleIdentifier (kw= '::' this_Identifier_3= ruleIdentifier )* { newCompositeNode(grammarAccess.getQualifiedNameAccess().getIdentifierParserRuleCall_1_0()); @@ -6010,26 +5885,20 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { afterParserOrEnumRuleCall(); - // InternalProblem.g:2178:4: (kw= '::' this_Identifier_3= ruleIdentifier )* - loop44: + // InternalProblem.g:2141:4: (kw= '::' this_Identifier_3= ruleIdentifier )* + loop43: do { - int alt44=2; - int LA44_0 = input.LA(1); - - if ( (LA44_0==40) ) { - int LA44_1 = input.LA(2); - - if ( (LA44_1==RULE_ID||(LA44_1>=41 && LA44_1<=44)) ) { - alt44=1; - } - + int alt43=2; + int LA43_0 = input.LA(1); + if ( (LA43_0==40) ) { + alt43=1; } - switch (alt44) { + switch (alt43) { case 1 : - // InternalProblem.g:2179:5: kw= '::' this_Identifier_3= ruleIdentifier + // InternalProblem.g:2142:5: kw= '::' this_Identifier_3= ruleIdentifier { kw=(Token)match(input,40,FOLLOW_3); @@ -6055,39 +5924,10 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { break; default : - break loop44; + break loop43; } } while (true); - // InternalProblem.g:2195:4: (kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID )? - int alt45=2; - int LA45_0 = input.LA(1); - - if ( (LA45_0==40) ) { - alt45=1; - } - switch (alt45) { - case 1 : - // InternalProblem.g:2196:5: kw= '::' this_QUOTED_ID_5= RULE_QUOTED_ID - { - kw=(Token)match(input,40,FOLLOW_39); - - current.merge(kw); - newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1_2_0()); - - this_QUOTED_ID_5=(Token)match(input,RULE_QUOTED_ID,FOLLOW_2); - - current.merge(this_QUOTED_ID_5); - - - newLeafNode(this_QUOTED_ID_5, grammarAccess.getQualifiedNameAccess().getQUOTED_IDTerminalRuleCall_1_2_1()); - - - } - break; - - } - } @@ -6120,7 +5960,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRuleIdentifier" - // InternalProblem.g:2217:1: entryRuleIdentifier returns [String current=null] : iv_ruleIdentifier= ruleIdentifier EOF ; + // InternalProblem.g:2166:1: entryRuleIdentifier returns [String current=null] : iv_ruleIdentifier= ruleIdentifier EOF ; public final String entryRuleIdentifier() throws RecognitionException { String current = null; @@ -6128,8 +5968,8 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { try { - // InternalProblem.g:2217:50: (iv_ruleIdentifier= ruleIdentifier EOF ) - // InternalProblem.g:2218:2: iv_ruleIdentifier= ruleIdentifier EOF + // InternalProblem.g:2166:50: (iv_ruleIdentifier= ruleIdentifier EOF ) + // InternalProblem.g:2167:2: iv_ruleIdentifier= ruleIdentifier EOF { newCompositeNode(grammarAccess.getIdentifierRule()); pushFollow(FOLLOW_1); @@ -6156,7 +5996,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleIdentifier" - // InternalProblem.g:2224:1: ruleIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) ; + // InternalProblem.g:2173:1: ruleIdentifier returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) ; public final AntlrDatatypeRuleToken ruleIdentifier() throws RecognitionException { AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken(); @@ -6167,47 +6007,47 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalProblem.g:2230:2: ( (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) ) - // InternalProblem.g:2231:2: (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) + // InternalProblem.g:2179:2: ( (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) ) + // InternalProblem.g:2180:2: (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) { - // InternalProblem.g:2231:2: (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) - int alt47=5; + // InternalProblem.g:2180:2: (this_ID_0= RULE_ID | kw= 'true' | kw= 'false' | kw= 'e' | kw= 'E' ) + int alt45=5; switch ( input.LA(1) ) { case RULE_ID: { - alt47=1; + alt45=1; } break; case 41: { - alt47=2; + alt45=2; } break; case 42: { - alt47=3; + alt45=3; } break; case 43: { - alt47=4; + alt45=4; } break; case 44: { - alt47=5; + alt45=5; } break; default: NoViableAltException nvae = - new NoViableAltException("", 47, 0, input); + new NoViableAltException("", 45, 0, input); throw nvae; } - switch (alt47) { + switch (alt45) { case 1 : - // InternalProblem.g:2232:3: this_ID_0= RULE_ID + // InternalProblem.g:2181:3: this_ID_0= RULE_ID { this_ID_0=(Token)match(input,RULE_ID,FOLLOW_2); @@ -6220,7 +6060,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2240:3: kw= 'true' + // InternalProblem.g:2189:3: kw= 'true' { kw=(Token)match(input,41,FOLLOW_2); @@ -6231,7 +6071,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 3 : - // InternalProblem.g:2246:3: kw= 'false' + // InternalProblem.g:2195:3: kw= 'false' { kw=(Token)match(input,42,FOLLOW_2); @@ -6242,7 +6082,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 4 : - // InternalProblem.g:2252:3: kw= 'e' + // InternalProblem.g:2201:3: kw= 'e' { kw=(Token)match(input,43,FOLLOW_2); @@ -6253,7 +6093,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 5 : - // InternalProblem.g:2258:3: kw= 'E' + // InternalProblem.g:2207:3: kw= 'E' { kw=(Token)match(input,44,FOLLOW_2); @@ -6286,7 +6126,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRuleInteger" - // InternalProblem.g:2267:1: entryRuleInteger returns [String current=null] : iv_ruleInteger= ruleInteger EOF ; + // InternalProblem.g:2216:1: entryRuleInteger returns [String current=null] : iv_ruleInteger= ruleInteger EOF ; public final String entryRuleInteger() throws RecognitionException { String current = null; @@ -6297,8 +6137,8 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); try { - // InternalProblem.g:2269:2: (iv_ruleInteger= ruleInteger EOF ) - // InternalProblem.g:2270:2: iv_ruleInteger= ruleInteger EOF + // InternalProblem.g:2218:2: (iv_ruleInteger= ruleInteger EOF ) + // InternalProblem.g:2219:2: iv_ruleInteger= ruleInteger EOF { newCompositeNode(grammarAccess.getIntegerRule()); pushFollow(FOLLOW_1); @@ -6328,7 +6168,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleInteger" - // InternalProblem.g:2279:1: ruleInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ; + // InternalProblem.g:2228:1: ruleInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ) ; public final AntlrDatatypeRuleToken ruleInteger() throws RecognitionException { AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken(); @@ -6340,22 +6180,22 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); try { - // InternalProblem.g:2286:2: ( ( (kw= '-' )? this_INT_1= RULE_INT ) ) - // InternalProblem.g:2287:2: ( (kw= '-' )? this_INT_1= RULE_INT ) + // InternalProblem.g:2235:2: ( ( (kw= '-' )? this_INT_1= RULE_INT ) ) + // InternalProblem.g:2236:2: ( (kw= '-' )? this_INT_1= RULE_INT ) { - // InternalProblem.g:2287:2: ( (kw= '-' )? this_INT_1= RULE_INT ) - // InternalProblem.g:2288:3: (kw= '-' )? this_INT_1= RULE_INT + // InternalProblem.g:2236:2: ( (kw= '-' )? this_INT_1= RULE_INT ) + // InternalProblem.g:2237:3: (kw= '-' )? this_INT_1= RULE_INT { - // InternalProblem.g:2288:3: (kw= '-' )? - int alt48=2; - int LA48_0 = input.LA(1); + // InternalProblem.g:2237:3: (kw= '-' )? + int alt46=2; + int LA46_0 = input.LA(1); - if ( (LA48_0==45) ) { - alt48=1; + if ( (LA46_0==45) ) { + alt46=1; } - switch (alt48) { + switch (alt46) { case 1 : - // InternalProblem.g:2289:4: kw= '-' + // InternalProblem.g:2238:4: kw= '-' { kw=(Token)match(input,45,FOLLOW_17); @@ -6401,7 +6241,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "entryRuleReal" - // InternalProblem.g:2309:1: entryRuleReal returns [String current=null] : iv_ruleReal= ruleReal EOF ; + // InternalProblem.g:2258:1: entryRuleReal returns [String current=null] : iv_ruleReal= ruleReal EOF ; public final String entryRuleReal() throws RecognitionException { String current = null; @@ -6412,8 +6252,8 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); try { - // InternalProblem.g:2311:2: (iv_ruleReal= ruleReal EOF ) - // InternalProblem.g:2312:2: iv_ruleReal= ruleReal EOF + // InternalProblem.g:2260:2: (iv_ruleReal= ruleReal EOF ) + // InternalProblem.g:2261:2: iv_ruleReal= ruleReal EOF { newCompositeNode(grammarAccess.getRealRule()); pushFollow(FOLLOW_1); @@ -6443,7 +6283,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleReal" - // InternalProblem.g:2321:1: ruleReal returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) ; + // InternalProblem.g:2270:1: ruleReal returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) ; public final AntlrDatatypeRuleToken ruleReal() throws RecognitionException { AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken(); @@ -6458,22 +6298,22 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens(); try { - // InternalProblem.g:2328:2: ( ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) ) - // InternalProblem.g:2329:2: ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) + // InternalProblem.g:2277:2: ( ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) ) + // InternalProblem.g:2278:2: ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) { - // InternalProblem.g:2329:2: ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) - // InternalProblem.g:2330:3: (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) + // InternalProblem.g:2278:2: ( (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) ) + // InternalProblem.g:2279:3: (kw= '-' )? this_INT_1= RULE_INT ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) { - // InternalProblem.g:2330:3: (kw= '-' )? - int alt49=2; - int LA49_0 = input.LA(1); + // InternalProblem.g:2279:3: (kw= '-' )? + int alt47=2; + int LA47_0 = input.LA(1); - if ( (LA49_0==45) ) { - alt49=1; + if ( (LA47_0==45) ) { + alt47=1; } - switch (alt49) { + switch (alt47) { case 1 : - // InternalProblem.g:2331:4: kw= '-' + // InternalProblem.g:2280:4: kw= '-' { kw=(Token)match(input,45,FOLLOW_17); @@ -6486,58 +6326,58 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } - this_INT_1=(Token)match(input,RULE_INT,FOLLOW_40); + this_INT_1=(Token)match(input,RULE_INT,FOLLOW_39); current.merge(this_INT_1); newLeafNode(this_INT_1, grammarAccess.getRealAccess().getINTTerminalRuleCall_1()); - // InternalProblem.g:2344:3: ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) - int alt53=2; - int LA53_0 = input.LA(1); + // InternalProblem.g:2293:3: ( (kw= '.' this_INT_3= RULE_INT ) | ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) ) + int alt51=2; + int LA51_0 = input.LA(1); - if ( (LA53_0==13) ) { - int LA53_1 = input.LA(2); + if ( (LA51_0==13) ) { + int LA51_1 = input.LA(2); - if ( (LA53_1==RULE_INT) ) { - int LA53_3 = input.LA(3); + if ( (LA51_1==RULE_INT) ) { + int LA51_3 = input.LA(3); - if ( ((LA53_3>=43 && LA53_3<=44)) ) { - alt53=2; + if ( (LA51_3==EOF||LA51_3==13||LA51_3==17||LA51_3==30) ) { + alt51=1; } - else if ( (LA53_3==EOF||LA53_3==13||LA53_3==17||LA53_3==30) ) { - alt53=1; + else if ( ((LA51_3>=43 && LA51_3<=44)) ) { + alt51=2; } else { NoViableAltException nvae = - new NoViableAltException("", 53, 3, input); + new NoViableAltException("", 51, 3, input); throw nvae; } } else { NoViableAltException nvae = - new NoViableAltException("", 53, 1, input); + new NoViableAltException("", 51, 1, input); throw nvae; } } - else if ( ((LA53_0>=43 && LA53_0<=44)) ) { - alt53=2; + else if ( ((LA51_0>=43 && LA51_0<=44)) ) { + alt51=2; } else { NoViableAltException nvae = - new NoViableAltException("", 53, 0, input); + new NoViableAltException("", 51, 0, input); throw nvae; } - switch (alt53) { + switch (alt51) { case 1 : - // InternalProblem.g:2345:4: (kw= '.' this_INT_3= RULE_INT ) + // InternalProblem.g:2294:4: (kw= '.' this_INT_3= RULE_INT ) { - // InternalProblem.g:2345:4: (kw= '.' this_INT_3= RULE_INT ) - // InternalProblem.g:2346:5: kw= '.' this_INT_3= RULE_INT + // InternalProblem.g:2294:4: (kw= '.' this_INT_3= RULE_INT ) + // InternalProblem.g:2295:5: kw= '.' this_INT_3= RULE_INT { kw=(Token)match(input,13,FOLLOW_17); @@ -6558,28 +6398,28 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2360:4: ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) + // InternalProblem.g:2309:4: ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) { - // InternalProblem.g:2360:4: ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) - // InternalProblem.g:2361:5: (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT + // InternalProblem.g:2309:4: ( (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT ) + // InternalProblem.g:2310:5: (kw= '.' this_INT_5= RULE_INT )? (kw= 'e' | kw= 'E' ) (kw= '-' | kw= '+' )? this_INT_10= RULE_INT { - // InternalProblem.g:2361:5: (kw= '.' this_INT_5= RULE_INT )? - int alt50=2; - int LA50_0 = input.LA(1); + // InternalProblem.g:2310:5: (kw= '.' this_INT_5= RULE_INT )? + int alt48=2; + int LA48_0 = input.LA(1); - if ( (LA50_0==13) ) { - alt50=1; + if ( (LA48_0==13) ) { + alt48=1; } - switch (alt50) { + switch (alt48) { case 1 : - // InternalProblem.g:2362:6: kw= '.' this_INT_5= RULE_INT + // InternalProblem.g:2311:6: kw= '.' this_INT_5= RULE_INT { kw=(Token)match(input,13,FOLLOW_17); current.merge(kw); newLeafNode(kw, grammarAccess.getRealAccess().getFullStopKeyword_2_1_0_0()); - this_INT_5=(Token)match(input,RULE_INT,FOLLOW_41); + this_INT_5=(Token)match(input,RULE_INT,FOLLOW_40); current.merge(this_INT_5); @@ -6592,27 +6432,27 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } - // InternalProblem.g:2375:5: (kw= 'e' | kw= 'E' ) - int alt51=2; - int LA51_0 = input.LA(1); + // InternalProblem.g:2324:5: (kw= 'e' | kw= 'E' ) + int alt49=2; + int LA49_0 = input.LA(1); - if ( (LA51_0==43) ) { - alt51=1; + if ( (LA49_0==43) ) { + alt49=1; } - else if ( (LA51_0==44) ) { - alt51=2; + else if ( (LA49_0==44) ) { + alt49=2; } else { NoViableAltException nvae = - new NoViableAltException("", 51, 0, input); + new NoViableAltException("", 49, 0, input); throw nvae; } - switch (alt51) { + switch (alt49) { case 1 : - // InternalProblem.g:2376:6: kw= 'e' + // InternalProblem.g:2325:6: kw= 'e' { - kw=(Token)match(input,43,FOLLOW_42); + kw=(Token)match(input,43,FOLLOW_41); current.merge(kw); newLeafNode(kw, grammarAccess.getRealAccess().getEKeyword_2_1_1_0()); @@ -6621,9 +6461,9 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2382:6: kw= 'E' + // InternalProblem.g:2331:6: kw= 'E' { - kw=(Token)match(input,44,FOLLOW_42); + kw=(Token)match(input,44,FOLLOW_41); current.merge(kw); newLeafNode(kw, grammarAccess.getRealAccess().getEKeyword_2_1_1_1()); @@ -6634,19 +6474,19 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } - // InternalProblem.g:2388:5: (kw= '-' | kw= '+' )? - int alt52=3; - int LA52_0 = input.LA(1); + // InternalProblem.g:2337:5: (kw= '-' | kw= '+' )? + int alt50=3; + int LA50_0 = input.LA(1); - if ( (LA52_0==45) ) { - alt52=1; + if ( (LA50_0==45) ) { + alt50=1; } - else if ( (LA52_0==33) ) { - alt52=2; + else if ( (LA50_0==33) ) { + alt50=2; } - switch (alt52) { + switch (alt50) { case 1 : - // InternalProblem.g:2389:6: kw= '-' + // InternalProblem.g:2338:6: kw= '-' { kw=(Token)match(input,45,FOLLOW_17); @@ -6657,7 +6497,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2395:6: kw= '+' + // InternalProblem.g:2344:6: kw= '+' { kw=(Token)match(input,33,FOLLOW_17); @@ -6712,7 +6552,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleLogicValue" - // InternalProblem.g:2417:1: ruleLogicValue returns [Enumerator current=null] : ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) ; + // InternalProblem.g:2366:1: ruleLogicValue returns [Enumerator current=null] : ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) ; public final Enumerator ruleLogicValue() throws RecognitionException { Enumerator current = null; @@ -6724,40 +6564,40 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalProblem.g:2423:2: ( ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) ) - // InternalProblem.g:2424:2: ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) + // InternalProblem.g:2372:2: ( ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) ) + // InternalProblem.g:2373:2: ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) { - // InternalProblem.g:2424:2: ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) - int alt54=3; + // InternalProblem.g:2373:2: ( (enumLiteral_0= 'true' ) | (enumLiteral_1= 'false' ) | (enumLiteral_2= 'unknown' ) ) + int alt52=3; switch ( input.LA(1) ) { case 41: { - alt54=1; + alt52=1; } break; case 42: { - alt54=2; + alt52=2; } break; case 46: { - alt54=3; + alt52=3; } break; default: NoViableAltException nvae = - new NoViableAltException("", 54, 0, input); + new NoViableAltException("", 52, 0, input); throw nvae; } - switch (alt54) { + switch (alt52) { case 1 : - // InternalProblem.g:2425:3: (enumLiteral_0= 'true' ) + // InternalProblem.g:2374:3: (enumLiteral_0= 'true' ) { - // InternalProblem.g:2425:3: (enumLiteral_0= 'true' ) - // InternalProblem.g:2426:4: enumLiteral_0= 'true' + // InternalProblem.g:2374:3: (enumLiteral_0= 'true' ) + // InternalProblem.g:2375:4: enumLiteral_0= 'true' { enumLiteral_0=(Token)match(input,41,FOLLOW_2); @@ -6771,10 +6611,10 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2433:3: (enumLiteral_1= 'false' ) + // InternalProblem.g:2382:3: (enumLiteral_1= 'false' ) { - // InternalProblem.g:2433:3: (enumLiteral_1= 'false' ) - // InternalProblem.g:2434:4: enumLiteral_1= 'false' + // InternalProblem.g:2382:3: (enumLiteral_1= 'false' ) + // InternalProblem.g:2383:4: enumLiteral_1= 'false' { enumLiteral_1=(Token)match(input,42,FOLLOW_2); @@ -6788,10 +6628,10 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 3 : - // InternalProblem.g:2441:3: (enumLiteral_2= 'unknown' ) + // InternalProblem.g:2390:3: (enumLiteral_2= 'unknown' ) { - // InternalProblem.g:2441:3: (enumLiteral_2= 'unknown' ) - // InternalProblem.g:2442:4: enumLiteral_2= 'unknown' + // InternalProblem.g:2390:3: (enumLiteral_2= 'unknown' ) + // InternalProblem.g:2391:4: enumLiteral_2= 'unknown' { enumLiteral_2=(Token)match(input,46,FOLLOW_2); @@ -6827,7 +6667,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { // $ANTLR start "ruleShortLogicValue" - // InternalProblem.g:2452:1: ruleShortLogicValue returns [Enumerator current=null] : ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) ; + // InternalProblem.g:2401:1: ruleShortLogicValue returns [Enumerator current=null] : ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) ; public final Enumerator ruleShortLogicValue() throws RecognitionException { Enumerator current = null; @@ -6838,31 +6678,31 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { enterRule(); try { - // InternalProblem.g:2458:2: ( ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) ) - // InternalProblem.g:2459:2: ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) + // InternalProblem.g:2407:2: ( ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) ) + // InternalProblem.g:2408:2: ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) { - // InternalProblem.g:2459:2: ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) - int alt55=2; - int LA55_0 = input.LA(1); + // InternalProblem.g:2408:2: ( (enumLiteral_0= '!' ) | (enumLiteral_1= '?' ) ) + int alt53=2; + int LA53_0 = input.LA(1); - if ( (LA55_0==32) ) { - alt55=1; + if ( (LA53_0==32) ) { + alt53=1; } - else if ( (LA55_0==47) ) { - alt55=2; + else if ( (LA53_0==47) ) { + alt53=2; } else { NoViableAltException nvae = - new NoViableAltException("", 55, 0, input); + new NoViableAltException("", 53, 0, input); throw nvae; } - switch (alt55) { + switch (alt53) { case 1 : - // InternalProblem.g:2460:3: (enumLiteral_0= '!' ) + // InternalProblem.g:2409:3: (enumLiteral_0= '!' ) { - // InternalProblem.g:2460:3: (enumLiteral_0= '!' ) - // InternalProblem.g:2461:4: enumLiteral_0= '!' + // InternalProblem.g:2409:3: (enumLiteral_0= '!' ) + // InternalProblem.g:2410:4: enumLiteral_0= '!' { enumLiteral_0=(Token)match(input,32,FOLLOW_2); @@ -6876,10 +6716,10 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { } break; case 2 : - // InternalProblem.g:2468:3: (enumLiteral_1= '?' ) + // InternalProblem.g:2417:3: (enumLiteral_1= '?' ) { - // InternalProblem.g:2468:3: (enumLiteral_1= '?' ) - // InternalProblem.g:2469:4: enumLiteral_1= '?' + // InternalProblem.g:2417:3: (enumLiteral_1= '?' ) + // InternalProblem.g:2418:4: enumLiteral_1= '?' { enumLiteral_1=(Token)match(input,47,FOLLOW_2); @@ -6918,11 +6758,11 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { protected DFA3 dfa3 = new DFA3(this); protected DFA35 dfa35 = new DFA35(this); - static final String dfa_1s = "\24\uffff"; - static final String dfa_2s = "\1\5\3\uffff\6\35\3\uffff\1\5\6\35"; - static final String dfa_3s = "\1\57\3\uffff\1\42\5\50\3\uffff\1\54\5\50\1\42"; - static final String dfa_4s = "\1\uffff\1\1\1\2\1\3\6\uffff\1\4\1\6\1\5\7\uffff"; - static final String dfa_5s = "\24\uffff}>"; + static final String dfa_1s = "\23\uffff"; + static final String dfa_2s = "\1\5\3\uffff\6\35\3\uffff\1\5\5\35"; + static final String dfa_3s = "\1\57\3\uffff\1\42\5\50\3\uffff\1\54\5\50"; + static final String dfa_4s = "\1\uffff\1\1\1\2\1\3\6\uffff\1\4\1\6\1\5\6\uffff"; + static final String dfa_5s = "\23\uffff}>"; static final String[] dfa_6s = { "\1\5\1\uffff\1\4\6\uffff\2\1\5\uffff\1\2\5\uffff\2\3\3\uffff\1\12\2\uffff\1\13\5\uffff\1\6\1\7\1\10\1\11\2\uffff\1\12", "", @@ -6937,13 +6777,12 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { "", "", "", - "\1\16\1\uffff\1\23\41\uffff\1\17\1\20\1\21\1\22", - "\1\12\4\uffff\1\14\5\uffff\1\15", + "\1\16\43\uffff\1\17\1\20\1\21\1\22", "\1\12\4\uffff\1\14\5\uffff\1\15", "\1\12\4\uffff\1\14\5\uffff\1\15", "\1\12\4\uffff\1\14\5\uffff\1\15", "\1\12\4\uffff\1\14\5\uffff\1\15", - "\1\12\4\uffff\1\14" + "\1\12\4\uffff\1\14\5\uffff\1\15" }; static final short[] dfa_1 = DFA.unpackEncodedString(dfa_1s); @@ -6970,11 +6809,11 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { return "146:2: (this_ClassDeclaration_0= ruleClassDeclaration | this_EnumDeclaration_1= ruleEnumDeclaration | this_PredicateDefinition_2= rulePredicateDefinition | this_Assertion_3= ruleAssertion | this_NodeValueAssertion_4= ruleNodeValueAssertion | this_ScopeDeclaration_5= ruleScopeDeclaration )"; } } - static final String dfa_7s = "\101\uffff"; - static final String dfa_8s = "\1\5\6\35\1\uffff\1\4\1\5\6\21\1\6\1\15\1\21\1\15\6\35\1\4\1\5\3\6\1\uffff\6\21\1\6\1\15\10\21\2\6\1\21\1\5\3\6\7\21\2\6\1\21"; - static final String dfa_9s = "\1\57\1\35\5\50\1\uffff\1\55\1\54\1\36\5\50\1\6\1\54\1\36\1\42\5\50\1\35\1\55\1\54\1\6\2\55\1\uffff\1\36\5\50\1\6\1\54\1\36\5\50\1\36\1\54\2\6\1\36\1\54\1\6\2\55\5\50\1\36\1\54\2\6\1\36"; - static final String dfa_10s = "\7\uffff\1\2\27\uffff\1\1\41\uffff"; - static final String dfa_11s = "\101\uffff}>"; + static final String dfa_7s = "\76\uffff"; + static final String dfa_8s = "\1\5\6\35\1\uffff\1\4\1\5\6\21\1\6\1\15\1\21\1\15\5\35\1\4\1\5\3\6\1\uffff\6\21\1\6\1\15\7\21\2\6\1\21\1\5\3\6\6\21\2\6\1\21"; + static final String dfa_9s = "\1\57\1\35\5\50\1\uffff\1\55\1\54\1\36\5\50\1\6\1\54\1\36\1\42\5\50\1\55\1\54\1\6\2\55\1\uffff\1\36\5\50\1\6\1\54\1\36\5\50\1\54\2\6\1\36\1\54\1\6\2\55\5\50\1\54\2\6\1\36"; + static final String dfa_10s = "\7\uffff\1\2\26\uffff\1\1\37\uffff"; + static final String dfa_11s = "\76\uffff}>"; static final String[] dfa_12s = { "\1\2\1\uffff\1\1\30\uffff\1\7\10\uffff\1\3\1\4\1\5\1\6\2\uffff\1\7", "\1\10", @@ -6985,62 +6824,59 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { "\1\10\12\uffff\1\11", "", "\1\22\1\13\1\21\1\12\26\uffff\1\23\12\uffff\1\14\1\15\1\16\1\17\1\20", - "\1\24\1\uffff\1\31\41\uffff\1\25\1\26\1\27\1\30", - "\1\32\14\uffff\1\23", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", + "\1\24\43\uffff\1\25\1\26\1\27\1\30", + "\1\31\14\uffff\1\23", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", "\1\21", - "\1\34\3\uffff\1\32\14\uffff\1\23\14\uffff\1\35\1\36", - "\1\32\14\uffff\1\23", - "\1\7\24\uffff\1\37", + "\1\33\3\uffff\1\31\14\uffff\1\23\14\uffff\1\34\1\35", + "\1\31\14\uffff\1\23", + "\1\7\24\uffff\1\36", "\1\10\12\uffff\1\11", "\1\10\12\uffff\1\11", "\1\10\12\uffff\1\11", "\1\10\12\uffff\1\11", "\1\10\12\uffff\1\11", - "\1\10", - "\1\50\1\41\1\47\1\40\41\uffff\1\42\1\43\1\44\1\45\1\46", - "\1\51\1\uffff\1\56\41\uffff\1\52\1\53\1\54\1\55", - "\1\57", - "\1\62\32\uffff\1\61\13\uffff\1\60", - "\1\62\32\uffff\1\61\13\uffff\1\60", + "\1\47\1\40\1\46\1\37\41\uffff\1\41\1\42\1\43\1\44\1\45", + "\1\50\43\uffff\1\51\1\52\1\53\1\54", + "\1\55", + "\1\60\32\uffff\1\57\13\uffff\1\56", + "\1\60\32\uffff\1\57\13\uffff\1\56", "", - "\1\32\14\uffff\1\23", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\47", - "\1\64\3\uffff\1\32\14\uffff\1\23\14\uffff\1\65\1\66", - "\1\32\14\uffff\1\23", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23\11\uffff\1\33", - "\1\32\14\uffff\1\23", - "\1\32\14\uffff\1\23\14\uffff\1\35\1\36", - "\1\62", - "\1\62", - "\1\32\14\uffff\1\23", - "\1\67\1\uffff\1\74\41\uffff\1\70\1\71\1\72\1\73", + "\1\31\14\uffff\1\23", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\46", + "\1\62\3\uffff\1\31\14\uffff\1\23\14\uffff\1\63\1\64", + "\1\31\14\uffff\1\23", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\11\uffff\1\32", + "\1\31\14\uffff\1\23\14\uffff\1\34\1\35", + "\1\60", + "\1\60", + "\1\31\14\uffff\1\23", + "\1\65\43\uffff\1\66\1\67\1\70\1\71", + "\1\72", + "\1\75\32\uffff\1\74\13\uffff\1\73", + "\1\75\32\uffff\1\74\13\uffff\1\73", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\11\uffff\1\61", + "\1\31\14\uffff\1\23\14\uffff\1\63\1\64", + "\1\75", "\1\75", - "\1\100\32\uffff\1\77\13\uffff\1\76", - "\1\100\32\uffff\1\77\13\uffff\1\76", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23\11\uffff\1\63", - "\1\32\14\uffff\1\23", - "\1\32\14\uffff\1\23\14\uffff\1\65\1\66", - "\1\100", - "\1\100", - "\1\32\14\uffff\1\23" + "\1\31\14\uffff\1\23" }; static final short[] dfa_7 = DFA.unpackEncodedString(dfa_7s); @@ -7081,7 +6917,7 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x00001E0000D000A0L}); public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x00001E0000D800A0L}); public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000042000L}); - public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x00001E00001000A0L}); + public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x00001E0000100020L}); public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x00000000001A0000L}); public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000100000L}); public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x00001E0001000020L}); @@ -7107,9 +6943,8 @@ public class InternalProblemParser extends AbstractInternalAntlrParser { public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000004000000000L}); public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000008000000040L}); public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0000010000000002L}); - public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0000000000000080L}); - public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000180000002000L}); - public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x0000180000000000L}); - public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x0000200200000040L}); + public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0000180000002000L}); + public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000180000000000L}); + public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x0000200200000040L}); } \ No newline at end of file diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/serializer/ProblemSemanticSequencer.java b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/serializer/ProblemSemanticSequencer.java index 012363db..0aac4924 100644 --- a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/serializer/ProblemSemanticSequencer.java +++ b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/serializer/ProblemSemanticSequencer.java @@ -246,7 +246,7 @@ public class ProblemSemanticSequencer extends AbstractDelegatingSemanticSequence * EnumLiteral returns Node * * Constraint: - * name=QuotedOrUnquotedId + * name=Identifier */ protected void sequence_EnumLiteral(ISerializationContext context, Node semanticObject) { if (errorAcceptor != null) { @@ -254,7 +254,7 @@ public class ProblemSemanticSequencer extends AbstractDelegatingSemanticSequence errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, ProblemPackage.Literals.NAMED_ELEMENT__NAME)); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getEnumLiteralAccess().getNameQuotedOrUnquotedIdParserRuleCall_0(), semanticObject.getName()); + feeder.accept(grammarAccess.getEnumLiteralAccess().getNameIdentifierParserRuleCall_0(), semanticObject.getName()); feeder.finish(); } diff --git a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/services/ProblemGrammarAccess.java b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/services/ProblemGrammarAccess.java index 2cb37dbc..603f12e3 100644 --- a/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/services/ProblemGrammarAccess.java +++ b/language/src/main/xtext-gen/org/eclipse/viatra/solver/language/services/ProblemGrammarAccess.java @@ -305,17 +305,17 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE public class EnumLiteralElements extends AbstractParserRuleElementFinder { private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.viatra.solver.language.Problem.EnumLiteral"); private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1); - private final RuleCall cNameQuotedOrUnquotedIdParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0); + private final RuleCall cNameIdentifierParserRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0); //EnumLiteral returns Node: - // name=QuotedOrUnquotedId; + // name=Identifier; @Override public ParserRule getRule() { return rule; } - //name=QuotedOrUnquotedId + //name=Identifier public Assignment getNameAssignment() { return cNameAssignment; } - //QuotedOrUnquotedId - public RuleCall getNameQuotedOrUnquotedIdParserRuleCall_0() { return cNameQuotedOrUnquotedIdParserRuleCall_0; } + //Identifier + public RuleCall getNameIdentifierParserRuleCall_0() { return cNameIdentifierParserRuleCall_0; } } public class ReferenceDeclarationElements extends AbstractParserRuleElementFinder { private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.viatra.solver.language.Problem.ReferenceDeclaration"); @@ -1299,25 +1299,6 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE //"*" public Keyword getAsteriskKeyword_1() { return cAsteriskKeyword_1; } } - public class QuotedOrUnquotedIdElements extends AbstractParserRuleElementFinder { - private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.viatra.solver.language.Problem.QuotedOrUnquotedId"); - private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1); - private final RuleCall cQUOTED_IDTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0); - private final RuleCall cIdentifierParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1); - - //QuotedOrUnquotedId: - // QUOTED_ID | Identifier; - @Override public ParserRule getRule() { return rule; } - - //QUOTED_ID | Identifier - public Alternatives getAlternatives() { return cAlternatives; } - - //QUOTED_ID - public RuleCall getQUOTED_IDTerminalRuleCall_0() { return cQUOTED_IDTerminalRuleCall_0; } - - //Identifier - public RuleCall getIdentifierParserRuleCall_1() { return cIdentifierParserRuleCall_1; } - } public class QualifiedNameElements extends AbstractParserRuleElementFinder { private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.viatra.solver.language.Problem.QualifiedName"); private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1); @@ -1327,21 +1308,18 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1); private final Keyword cColonColonKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0); private final RuleCall cIdentifierParserRuleCall_1_1_1 = (RuleCall)cGroup_1_1.eContents().get(1); - private final Group cGroup_1_2 = (Group)cGroup_1.eContents().get(2); - private final Keyword cColonColonKeyword_1_2_0 = (Keyword)cGroup_1_2.eContents().get(0); - private final RuleCall cQUOTED_IDTerminalRuleCall_1_2_1 = (RuleCall)cGroup_1_2.eContents().get(1); //QualifiedName hidden(): - // QUOTED_ID | Identifier ("::" Identifier)* ("::" QUOTED_ID)?; + // QUOTED_ID | Identifier ("::" Identifier)*; @Override public ParserRule getRule() { return rule; } - //QUOTED_ID | Identifier ("::" Identifier)* ("::" QUOTED_ID)? + //QUOTED_ID | Identifier ("::" Identifier)* public Alternatives getAlternatives() { return cAlternatives; } //QUOTED_ID public RuleCall getQUOTED_IDTerminalRuleCall_0() { return cQUOTED_IDTerminalRuleCall_0; } - //Identifier ("::" Identifier)* ("::" QUOTED_ID)? + //Identifier ("::" Identifier)* public Group getGroup_1() { return cGroup_1; } //Identifier @@ -1355,15 +1333,6 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE //Identifier public RuleCall getIdentifierParserRuleCall_1_1_1() { return cIdentifierParserRuleCall_1_1_1; } - - //("::" QUOTED_ID)? - public Group getGroup_1_2() { return cGroup_1_2; } - - //"::" - public Keyword getColonColonKeyword_1_2_0() { return cColonColonKeyword_1_2_0; } - - //QUOTED_ID - public RuleCall getQUOTED_IDTerminalRuleCall_1_2_1() { return cQUOTED_IDTerminalRuleCall_1_2_1; } } public class IdentifierElements extends AbstractParserRuleElementFinder { private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.viatra.solver.language.Problem.Identifier"); @@ -1592,7 +1561,6 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE private final RangeMultiplicityElements pRangeMultiplicity; private final ExactMultiplicityElements pExactMultiplicity; private final UpperBoundElements pUpperBound; - private final QuotedOrUnquotedIdElements pQuotedOrUnquotedId; private final QualifiedNameElements pQualifiedName; private final IdentifierElements pIdentifier; private final IntegerElements pInteger; @@ -1645,7 +1613,6 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE this.pRangeMultiplicity = new RangeMultiplicityElements(); this.pExactMultiplicity = new ExactMultiplicityElements(); this.pUpperBound = new UpperBoundElements(); - this.pQuotedOrUnquotedId = new QuotedOrUnquotedIdElements(); this.pQualifiedName = new QualifiedNameElements(); this.pIdentifier = new IdentifierElements(); this.pInteger = new IntegerElements(); @@ -1730,7 +1697,7 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE } //EnumLiteral returns Node: - // name=QuotedOrUnquotedId; + // name=Identifier; public EnumLiteralElements getEnumLiteralAccess() { return pEnumLiteral; } @@ -2047,18 +2014,8 @@ public class ProblemGrammarAccess extends AbstractElementFinder.AbstractGrammarE return getUpperBoundAccess().getRule(); } - //QuotedOrUnquotedId: - // QUOTED_ID | Identifier; - public QuotedOrUnquotedIdElements getQuotedOrUnquotedIdAccess() { - return pQuotedOrUnquotedId; - } - - public ParserRule getQuotedOrUnquotedIdRule() { - return getQuotedOrUnquotedIdAccess().getRule(); - } - //QualifiedName hidden(): - // QUOTED_ID | Identifier ("::" Identifier)* ("::" QUOTED_ID)?; + // QUOTED_ID | Identifier ("::" Identifier)*; public QualifiedNameElements getQualifiedNameAccess() { return pQualifiedName; } diff --git a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend index b007cf8b..9b1bb698 100644 --- a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend +++ b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemParsingTest.xtend @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.25.0 + * generated by Xtext 2.26.0.M1 */ package org.eclipse.viatra.solver.language.tests diff --git a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend new file mode 100644 index 00000000..7872b0f7 --- /dev/null +++ b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemScopingTest.xtend @@ -0,0 +1,148 @@ +/* + * generated by Xtext 2.25.0 + */ +package org.eclipse.viatra.solver.language.tests + +import com.google.inject.Inject +import org.eclipse.viatra.solver.language.model.problem.Problem +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.eclipse.xtext.testing.util.ParseHelper +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.^extension.ExtendWith + +import static org.hamcrest.MatcherAssert.assertThat +import static org.hamcrest.Matchers.* + +@ExtendWith(InjectionExtension) +@InjectWith(ProblemInjectorProvider) +class ProblemScopingTest { + @Inject + ParseHelper parseHelper + + @Inject + extension ProblemTestUtil + + @Test + def void builtInArgumentTypeTest() { + val it = parseHelper.parse(''' + pred predicate(node a, data b, int c). + ''').assertNoErrors + assertThat(pred('predicate').param(0).parameterType, equalTo(builtin.findClass('node'))) + assertThat(pred('predicate').param(1).parameterType, equalTo(builtin.findClass('data'))) + assertThat(pred('predicate').param(2).parameterType, equalTo(builtin.findClass('int'))) + } + + @Test + def void builtiQualifiedArgumentTypeTest() { + val it = parseHelper.parse(''' + pred predicate(builtin::node a, builtin::data b, builtin::int c). + ''').assertNoErrors + assertThat(pred('predicate').param(0).parameterType, equalTo(builtin.findClass('node'))) + assertThat(pred('predicate').param(1).parameterType, equalTo(builtin.findClass('data'))) + assertThat(pred('predicate').param(2).parameterType, equalTo(builtin.findClass('int'))) + } + + @Test + def void implicitNodeInAssertionTest() { + val it = parseHelper.parse(''' + pred predicate(node a, node b). + predicate(a, a). + ?predicate(a, b). + ''').assertNoErrors + assertThat(nodeNames, hasItems('a', 'b')) + assertThat(assertion(0).arg(0).node, equalTo(node('a'))) + assertThat(assertion(0).arg(1).node, equalTo(node('a'))) + assertThat(assertion(1).arg(0).node, equalTo(node('a'))) + assertThat(assertion(1).arg(1).node, equalTo(node('b'))) + } + + @Test + def void quotedNodeInAssertionTest() { + val it = parseHelper.parse(''' + pred predicate(node a, node b). + predicate('a', 'a'). + ?predicate('a', 'b'). + ''').assertNoErrors + assertThat(nodeNames, hasItems("'a'", "'b'")) + assertThat(assertion(0).arg(0).node, equalTo(node("'a'"))) + assertThat(assertion(0).arg(1).node, equalTo(node("'a'"))) + assertThat(assertion(1).arg(0).node, equalTo(node("'a'"))) + assertThat(assertion(1).arg(1).node, equalTo(node("'b'"))) + } + + @Test + def void builtInNodeInAssertionTest() { + val it = parseHelper.parse(''' + pred predicate(node a). + predicate(int::new). + ''').assertNoErrors + assertThat(nodes, empty) + assertThat(assertion(0).arg(0).node, equalTo(builtin.findClass('int').newNode)) + } + + @Test + def void qualifiedBuiltInNodeInAssertionTest() { + val it = parseHelper.parse(''' + pred predicate(node a). + predicate(builtin::int::new). + ''').assertNoErrors + assertThat(nodes, empty) + assertThat(assertion(0).arg(0).node, equalTo(builtin.findClass('int').newNode)) + } + + @Test + def void classNewNodeTest() { + val it = parseHelper.parse(''' + class Foo. + pred predicate(node a). + predicate(Foo::new). + ''').assertNoErrors + assertThat(nodes, empty) + assertThat(assertion(0).arg(0).node, equalTo(findClass('Foo').newNode)) + } + + + @Test + def void qualifiedClassNewNodeTest() { + val it = parseHelper.parse(''' + problem test. + class Foo. + pred predicate(node a). + predicate(test::Foo::new). + ''').assertNoErrors + assertThat(nodes, empty) + assertThat(assertion(0).arg(0).node, equalTo(findClass('Foo').newNode)) + } + + @Test + def void newNodeIsNotSpecial() { + val it = parseHelper.parse(''' + class Foo. + pred predicate(node a). + predicate(new). + ''').assertNoErrors + assertThat(nodeNames, hasItem('new')) + assertThat(assertion(0).arg(0).node, not(equalTo(findClass('Foo').newNode))) + } + + @Test + def void implicitNodeInPredicateTest() { + val it = parseHelper.parse(''' + pred predicate(node a) :- node(b). + predicate(b). + ''').assertNoErrors + assertThat(nodeNames, hasItem("b")) + assertThat(pred("predicate").conj(0).lit(0).arg(0).node, equalTo(node("b"))) + assertThat(assertion(0).arg(0).node, equalTo(node("b"))) + } + + @Test + def void quotedNodeInPredicateTest() { + val it = parseHelper.parse(''' + pred predicate(node a) :- node('b'). + ''').assertNoErrors + assertThat(nodeNames, hasItem("'b'")) + assertThat(pred("predicate").conj(0).lit(0).arg(0).node, equalTo(node("'b'"))) + } +} diff --git a/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend new file mode 100644 index 00000000..98b53675 --- /dev/null +++ b/language/src/test/java/org/eclipse/viatra/solver/language/tests/ProblemTestUtil.xtend @@ -0,0 +1,110 @@ +package org.eclipse.viatra.solver.language.tests + +import org.eclipse.emf.ecore.util.EcoreUtil +import org.eclipse.viatra.solver.language.ProblemUtil +import org.eclipse.viatra.solver.language.model.problem.Argument +import org.eclipse.viatra.solver.language.model.problem.Assertion +import org.eclipse.viatra.solver.language.model.problem.AssertionArgument +import org.eclipse.viatra.solver.language.model.problem.Atom +import org.eclipse.viatra.solver.language.model.problem.ClassDeclaration +import org.eclipse.viatra.solver.language.model.problem.Conjunction +import org.eclipse.viatra.solver.language.model.problem.EnumDeclaration +import org.eclipse.viatra.solver.language.model.problem.Literal +import org.eclipse.viatra.solver.language.model.problem.NegativeLiteral +import org.eclipse.viatra.solver.language.model.problem.Node +import org.eclipse.viatra.solver.language.model.problem.NodeAssertionArgument +import org.eclipse.viatra.solver.language.model.problem.PredicateDefinition +import org.eclipse.viatra.solver.language.model.problem.Problem +import org.eclipse.viatra.solver.language.model.problem.Variable +import org.eclipse.viatra.solver.language.model.problem.VariableOrNodeArgument +import org.junit.jupiter.api.Assertions + +class ProblemTestUtil { + def builtin(Problem it) { + ProblemUtil.getBuiltInLibrary(it).get + } + + def assertNoErrors(Problem it) { + Assertions.assertNotNull(it) + EcoreUtil.resolveAll(it) + val errors = eResource.errors + Assertions.assertTrue(errors.isEmpty, '''Unexpected errors: «errors.join(", ")»''') + it + } + + def nodeNames(Problem it) { + nodes.map[name] + } + + def pred(Problem it, String name) { + statements.filter(PredicateDefinition).findFirst[it.name == name] + } + + def param(PredicateDefinition it, int i) { + parameters.get(i) + } + + def conj(PredicateDefinition it, int i) { + bodies.get(i) + } + + def lit(Conjunction it, int i) { + literals.get(i) + } + + def negated(Literal it) { + (it as NegativeLiteral).atom + } + + def relation(Literal it) { + (it as Atom).relation + } + + def arg(Atom it, int i) { + it.arguments.get(i) + } + + def arg(Literal it, int i) { + (it as Atom).arg(i) + } + + def variable(Argument it) { + (it as VariableOrNodeArgument).variableOrNode as Variable + } + + def node(Argument it) { + (it as VariableOrNodeArgument).variableOrNode as Node + } + + def assertion(Problem it, int i) { + statements.filter(Assertion).get(i) + } + + def arg(Assertion it, int i) { + arguments.get(i) + } + + def node(AssertionArgument it) { + (it as NodeAssertionArgument).node + } + + def node(Problem it, String name) { + nodes.findFirst[it.name == name] + } + + def findClass(Problem it, String name) { + statements.filter(ClassDeclaration).findFirst[it.name == name] + } + + def reference(ClassDeclaration it, String name) { + it.referenceDeclarations.findFirst[it.name == name] + } + + def findEnum(Problem it, String name) { + statements.filter(EnumDeclaration).findFirst[it.name == name] + } + + def literal(EnumDeclaration it, String name) { + literals.findFirst[it.name == name] + } +} -- cgit v1.2.3-54-g00ecf